#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] %hhu %hhu -> %hhu (%u)\n", i, b1[i], b2[i], 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+JiBiMikgewogICAgc3RkOjpiaXRzZXQ8Tj4gcmVzdWx0OwogICAgdW5zaWduZWQgdmFsdWUgPSAwOwoKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgICAgICAgdmFsdWUgKz0gYjFbaV0gKyBiMltpXTsKICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZSAmIDE7CiAgICAgICAgdmFsdWUgPj49IDE7CgogICAgICAgIHByaW50ZiAoIlslel0gJWhodSAlaGh1IC0+ICVoaHUgKCV1KVxuIiwgaSwgYjFbaV0sIGIyW2ldLCByZXN1bHRbaV0sIHZhbHVlKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0Owp9CiAKaW50IG1haW4gKCkgewogICAgc3RkOjpiaXRzZXQ8MTA+IGZpcnN0KDIwKTsKICAgIHN0ZDo6Yml0c2V0PDEwPiBzZWNvbmQgKDE1KTsKICAgIHN0ZDo6Y291dCA8PCBzdW0gKGZpcnN0LCBzZWNvbmQpLnRvX3Vsb25nKCkgPDwgc3RkOjplbmRsOwp9