#include <inttypes.h>
#include <stdio.h>
typedef union
{
struct
{
#define BITG(n) uint8_t bit##n : 1
BITG(0);
BITG(1);
BITG(2);
BITG(3);
BITG(4);
BITG(5);
BITG(6);
BITG(7);
#undef BITG
} bits;
uint8_t value;
}getbit;
uint8_t bit_sum(uint8_t, uint8_t);
uint8_t bit_sum(uint8_t a, uint8_t b)
{
getbit op1, op2, opr;
uint8_t carry;
op1.value=a; op2.value=b;
#define OP1(n) op1.bits.bit##n
#define OP2(n) op2.bits.bit##n
#define OPR(n) opr.bits.bit##n
#define XOR(a,b) ((a)^(b))
#define AND(a,b) ((a)&(b))
OPR(0) = XOR(OP1(0), OP2(0));
carry = AND(OP1(0), OP2(0));
#define SETBIT(n) \
OPR(n) = XOR \
( \
carry, \
XOR(OP1(n), OP2(n)) \
);
#define CARRYBIT(n) \
carry = XOR \
( \
AND(OP1(n), OP2(n)), \
AND \
( \
XOR(OP1(n), OP2(n)), \
carry \
) \
);
SETBIT(1);
CARRYBIT(1);
SETBIT(2);
CARRYBIT(2);
SETBIT(3);
CARRYBIT(3);
SETBIT(4);
CARRYBIT(4);
SETBIT(5);
CARRYBIT(5);
SETBIT(6);
CARRYBIT(6);
SETBIT(7);
return opr.value;
#undef SETBIT
#undef CARRYBIT
#undef OP1
#undef OP2
#undef OPR
#undef XOR
#undef AND
}
int main (int argc, char *argv[], char *envp[])
{
uint8_t a, b, c;
scanf ("%"SCNu8
"%"SCNu8
, &a
, &b
); c = bit_sum(a,b);
return 0;
}
I2luY2x1ZGUgPGludHR5cGVzLmg+CiNpbmNsdWRlIDxzdGRpby5oPgoKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0CiAgewogICAgI2RlZmluZSBCSVRHKG4pIHVpbnQ4X3QgYml0IyNuIDogMQogICAgQklURygwKTsKICAgIEJJVEcoMSk7CiAgICBCSVRHKDIpOwogICAgQklURygzKTsKICAgIEJJVEcoNCk7CiAgICBCSVRHKDUpOwogICAgQklURyg2KTsKICAgIEJJVEcoNyk7CiAgICAjdW5kZWYgQklURwogIH0gYml0czsKICB1aW50OF90IHZhbHVlOwp9Z2V0Yml0OwoKdWludDhfdCBiaXRfc3VtKHVpbnQ4X3QsIHVpbnQ4X3QpOwoKCnVpbnQ4X3QgYml0X3N1bSh1aW50OF90IGEsIHVpbnQ4X3QgYikKewogIGdldGJpdCBvcDEsIG9wMiwgb3ByOwogIHVpbnQ4X3QgY2Fycnk7CiAgb3AxLnZhbHVlPWE7IG9wMi52YWx1ZT1iOwogICNkZWZpbmUgT1AxKG4pIG9wMS5iaXRzLmJpdCMjbgogICNkZWZpbmUgT1AyKG4pIG9wMi5iaXRzLmJpdCMjbgogICNkZWZpbmUgT1BSKG4pIG9wci5iaXRzLmJpdCMjbgogICNkZWZpbmUgWE9SKGEsYikgKChhKV4oYikpCiAgI2RlZmluZSBBTkQoYSxiKSAoKGEpJihiKSkKICBPUFIoMCkgPSBYT1IoT1AxKDApLCBPUDIoMCkpOwogIGNhcnJ5ID0gQU5EKE9QMSgwKSwgT1AyKDApKTsKICAjZGVmaW5lIFNFVEJJVChuKSAgICAgICAgICAgICAgICBcCiAgT1BSKG4pID0gWE9SICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGNhcnJ5LCAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBYT1IoT1AxKG4pLCBPUDIobikpICAgXAogICAgICAgICAgICk7CgogICNkZWZpbmUgQ0FSUllCSVQobikgICAgICAgICAgICAgIFwKICBjYXJyeSA9IFhPUiAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICBBTkQoT1AxKG4pLCBPUDIobikpLCAgIFwKICAgICAgICAgICAgQU5EICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgIFhPUihPUDEobiksIE9QMihuKSksIFwKICAgICAgICAgICAgICBjYXJyeSAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgKTsKICBTRVRCSVQoMSk7CiAgQ0FSUllCSVQoMSk7CiAgU0VUQklUKDIpOwogIENBUlJZQklUKDIpOwogIFNFVEJJVCgzKTsKICBDQVJSWUJJVCgzKTsKICBTRVRCSVQoNCk7CiAgQ0FSUllCSVQoNCk7CiAgU0VUQklUKDUpOwogIENBUlJZQklUKDUpOwogIFNFVEJJVCg2KTsKICBDQVJSWUJJVCg2KTsKICBTRVRCSVQoNyk7CiAgcmV0dXJuIG9wci52YWx1ZTsKICAjdW5kZWYgU0VUQklUCiAgI3VuZGVmIENBUlJZQklUCiAgI3VuZGVmIE9QMQogICN1bmRlZiBPUDIKICAjdW5kZWYgT1BSCiAgI3VuZGVmIFhPUgogICN1bmRlZiBBTkQKfQoKaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmVudnBbXSkKewogIHVpbnQ4X3QgYSwgYiwgYzsKICBzY2FuZiAoIiUiU0NOdTgiJSJTQ051OCwgJmEsICZiKTsKICBjID0gYml0X3N1bShhLGIpOwogIHByaW50ZigiJSJQUkl1OCJcbiIsIGMpOwogIHJldHVybiAwOwp9