#include <iostream>
using namespace std;
enum NumericType : unsigned int
{
None = 0,
PadWithZero = 0x01,
NegativeSign = 0x02,
PositiveSign = 0x04,
SpacePrefix = 0x08
};
inline NumericType operator |(NumericType a, NumericType b)
{
return static_cast<NumericType>(static_cast<int>(a) | static_cast<int>(b));
}
inline NumericType operator &(NumericType a, NumericType b)
{
return static_cast<NumericType>(static_cast<int>(a) & static_cast<int>(b));
}
inline NumericType& operator |=(NumericType& a, NumericType b)
{
return a = (a | b);
}
inline NumericType& operator &=(NumericType& a, NumericType b)
{
return a = (a & b);
}
int main() {
// your code goes here
NumericType a = PadWithZero;
a |= NegativeSign;
cout << static_cast<int>(a) << endl;
unsigned int b = PositiveSign;
b |= SpacePrefix;
cout << static_cast<int>(b) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZW51bSBOdW1lcmljVHlwZSA6IHVuc2lnbmVkIGludAp7CiAgICBOb25lICAgICAgICAgICAgICAgICAgICA9IDAsCgogICAgUGFkV2l0aFplcm8gICAgICAgICAgICAgPSAweDAxLAogICAgTmVnYXRpdmVTaWduICAgICAgICAgICAgPSAweDAyLAogICAgUG9zaXRpdmVTaWduICAgICAgICAgICAgPSAweDA0LAogICAgU3BhY2VQcmVmaXggICAgICAgICAgICAgPSAweDA4Cn07CgppbmxpbmUgTnVtZXJpY1R5cGUgb3BlcmF0b3IgfChOdW1lcmljVHlwZSBhLCBOdW1lcmljVHlwZSBiKQp7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TnVtZXJpY1R5cGU+KHN0YXRpY19jYXN0PGludD4oYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KGIpKTsKfQoKaW5saW5lIE51bWVyaWNUeXBlIG9wZXJhdG9yICYoTnVtZXJpY1R5cGUgYSwgTnVtZXJpY1R5cGUgYikKewogICAgcmV0dXJuIHN0YXRpY19jYXN0PE51bWVyaWNUeXBlPihzdGF0aWNfY2FzdDxpbnQ+KGEpICYgc3RhdGljX2Nhc3Q8aW50PihiKSk7Cn0KCmlubGluZSBOdW1lcmljVHlwZSYgb3BlcmF0b3IgfD0oTnVtZXJpY1R5cGUmIGEsIE51bWVyaWNUeXBlIGIpCnsKICAgIHJldHVybiBhID0gKGEgfCBiKTsKfQoKaW5saW5lIE51bWVyaWNUeXBlJiBvcGVyYXRvciAmPShOdW1lcmljVHlwZSYgYSwgTnVtZXJpY1R5cGUgYikKewogICAgcmV0dXJuIGEgPSAoYSAmIGIpOwp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCU51bWVyaWNUeXBlIGEgPSBQYWRXaXRoWmVybzsKCWEgfD0gTmVnYXRpdmVTaWduOwoJY291dCA8PCBzdGF0aWNfY2FzdDxpbnQ+KGEpIDw8IGVuZGw7CgkKCXVuc2lnbmVkIGludCBiID0gUG9zaXRpdmVTaWduOwoJYiB8PSBTcGFjZVByZWZpeDsKCWNvdXQgPDwgc3RhdGljX2Nhc3Q8aW50PihiKSA8PCBlbmRsOwoJCglyZXR1cm4gMDsKfQ==