#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;
std::printf ("[%d] %d %d -> %d (%d)\n", (int)i, b1[i], b2[i], (bool)result[i], 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/IDEgOiAwKTsKICAgICAgICBjYXJyeSA9IHZhbHVlID4gMTsKICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZSAlIDI7CiAgICAgICAgc3RkOjpwcmludGYgKCJbJWRdICVkICVkIC0+ICVkICglZClcbiIsIChpbnQpaSwgYjFbaV0sIGIyW2ldLCAoYm9vbClyZXN1bHRbaV0sIGNhcnJ5KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KIAppbnQgbWFpbiAoKSB7CiAgICBzdGQ6OmJpdHNldDwxMD4gZmlyc3QoMjApOwogICAgc3RkOjpiaXRzZXQ8MTA+IHNlY29uZCAoMTUpOwogICAgc3RkOjpjb3V0IDw8IHN1bSAoZmlyc3QsIHNlY29uZCkudG9fdWxvbmcoKSA8PCBzdGQ6OmVuZGw7Cn0=