#include <iostream>
#include <string>
#include <vector>
#include <bitset>
#include <iomanip>

using namespace std;
 
class MyBinary {
  private:
    static const unsigned _BIT_LEN = 1024;

    const int         _digits;
    int               _len;
    bitset<_BIT_LEN>  _acc;
 
  public:
    MyBinary(int digits) : _digits(digits), _len(5), _acc(digits) {}
 
    void add(unsigned long val) {
      _len += _digits;
      _acc <<= _digits;
      
      for (int i(0); i<_digits; i++)
        _acc.set(i, val & (1U << i));
    }
    
    vector<string>  get_bit_strings(int offset) {
      string src(_acc.to_string().substr(_BIT_LEN - _len));
      vector<string> dst;
      
      for (int i(0); i<_len; i+=offset) {
        if (i < _len-offset)
          dst.push_back(src.substr(i, offset));
        else {
          string tmp(src.substr(i, offset - (_len - i)));
          tmp.append(_len - i, '0');
          dst.push_back(tmp);
        }
      }
      return dst;
    }   
};
 
int main()
{
  MyBinary mb(6);
  
  mb.add(0);
  mb.add(20);
  mb.add(0);
  mb.add(20);
  vector<string> vs(mb.get_bit_strings(8));
  
  for (int i(0); i<vs.size(); i++)
    cout << "0x" << std::hex << std::setw(2) << std::setfill('0') << bitset<8>(vs.at(i)).to_ulong() << endl;

  return 0;
}