#include <iostream>
#include <bitset>
#include <cstdio>
template <size_t N>
std::bitset<N> sum (const std::bitset<N>& b1, const std::bitset<N>& b2) {
std::bitset<N> result;
bool carry = false;
for (size_t i = 0 ; i < N ; ++i) {
unsigned value = b1[i] + b2[i] + (carry ? 1 : 0);
carry = value > 1;
result[i] = value % 2;
printf ("[%d] %u %u -> %u (%d)\n", (int)i, (unsigned)b1[i], (unsigned)b2[i], (unsigned)result[i], (int)carry);
}
return result;
}
int main () {
std::bitset<10> first(20);
std::bitset<10> second (15);
std::cout << sum (first, second).to_ulong() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8Y3N0ZGlvPgogCnRlbXBsYXRlIDxzaXplX3QgTj4Kc3RkOjpiaXRzZXQ8Tj4gc3VtIChjb25zdCBzdGQ6OmJpdHNldDxOPiYgYjEsIGNvbnN0IHN0ZDo6Yml0c2V0PE4+JiBiMikgewogICAgc3RkOjpiaXRzZXQ8Tj4gcmVzdWx0OwogICAgYm9vbCBjYXJyeSA9IGZhbHNlOwogICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgTiA7ICsraSkgewogICAgICAgIHVuc2lnbmVkIHZhbHVlID0gYjFbaV0gKyBiMltpXSArIChjYXJyeSA/IDEgOiAwKTsKICAgICAgICBjYXJyeSA9IHZhbHVlID4gMTsKICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZSAlIDI7CiAgICAgICAgcHJpbnRmICgiWyVkXSAldSAldSAtPiAldSAoJWQpXG4iLCAoaW50KWksICh1bnNpZ25lZCliMVtpXSwgKHVuc2lnbmVkKWIyW2ldLCAodW5zaWduZWQpcmVzdWx0W2ldLCAoaW50KWNhcnJ5KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KIAppbnQgbWFpbiAoKSB7CiAgICBzdGQ6OmJpdHNldDwxMD4gZmlyc3QoMjApOwogICAgc3RkOjpiaXRzZXQ8MTA+IHNlY29uZCAoMTUpOwogICAgc3RkOjpjb3V0IDw8IHN1bSAoZmlyc3QsIHNlY29uZCkudG9fdWxvbmcoKSA8PCBzdGQ6OmVuZGw7Cn0=