#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;
unsigned value = 0;
for (size_t i = 0; i < N; ++i) {
value += b1[i] + b2[i];
result[i] = value & 1;
value >>= 1;
printf ("[%z] %u %u -> %u (%u)\n", i, (unsigned)b1[i], (unsigned)b2[i], (unsigned)result[i], value);
}
return result;
}
int main () {
std::bitset<10> first(20);
std::bitset<10> second (15);
std::cout << sum (first, second).to_ulong() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8Y3N0ZGlvPgogCnRlbXBsYXRlIDxzaXplX3QgTj4gc3RkOjpiaXRzZXQ8Tj4gc3VtIChjb25zdCBzdGQ6OmJpdHNldDxOPiYgYjEsIGNvbnN0IHN0ZDo6Yml0c2V0PE4+JiBiMikgewogICAgc3RkOjpiaXRzZXQ8Tj4gcmVzdWx0OwogICAgdW5zaWduZWQgdmFsdWUgPSAwOwoKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgICAgICAgdmFsdWUgKz0gYjFbaV0gKyBiMltpXTsKICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZSAmIDE7CiAgICAgICAgdmFsdWUgPj49IDE7CgogICAgICAgIHByaW50ZiAoIlslel0gJXUgJXUgLT4gJXUgKCV1KVxuIiwgaSwgKHVuc2lnbmVkKWIxW2ldLCAodW5zaWduZWQpYjJbaV0sICh1bnNpZ25lZClyZXN1bHRbaV0sIHZhbHVlKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0Owp9CiAKaW50IG1haW4gKCkgewogICAgc3RkOjpiaXRzZXQ8MTA+IGZpcnN0KDIwKTsKICAgIHN0ZDo6Yml0c2V0PDEwPiBzZWNvbmQgKDE1KTsKICAgIHN0ZDo6Y291dCA8PCBzdW0gKGZpcnN0LCBzZWNvbmQpLnRvX3Vsb25nKCkgPDwgc3RkOjplbmRsOwp9