#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;
}