#include <iostream>

using namespace std;

unsigned inv(unsigned x)
{
  unsigned y = x;

  y |= y >> 1;
  y |= y >> 2;
  y |= y >> 4;
  y |= y >> 8;
  y |= y >> 16;
  
  return x ^ y;
}

int main()
{
  int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 255, 256, 317, 402, 7200, 86123456, 1000000000, 1234567897 };
  
  for (unsigned q=0; q < sizeof a / sizeof *a; ++q)
    cout << a[q] << ' ' << inv(a[q]) << endl;
  
  return 0;
}