#include <stdio.h>
#include <stdlib.h>
#define PR (void)printf(
main(int argc, char *argv[])
{
int n, x, fr, to;
unsigned int i, j, p[3];
n = atoi(argv[1]);
p[0]=1; p[0]<<=n; p[0]--;
p[1]=p[2]=0;
/* Print out the initial configuration: */
PR"\n|");
for(i=n;i>0;i--) PR" %d",i);
PR"\n|\n|\n");
for(x=1; x < (1 << n); x++) {
i=x&x-1; fr=(i+i/3)&3;
i=(x|x-1)+1; to=(i+i/3)&3;
for(i=x, j=1; ; i>>=1, j<<=1) { if(i&1) break; }
/* Move the bit: */
p[fr] &= ~j;
p[to] |= j;
/* Print out the configuration after move x: */
PR"\n|"); j=1; j<<=n;
for(i=n;i>0;i--) { j>>=1; if(j&p[0]) PR" %d",i); }
PR"\n|"); j=1; j<<=n;
for(i=n;i>0;i--) { j>>=1; if(j&p[1]) PR" %d",i); }
PR"\n|"); j=1; j<<=n;
for(i=n;i>0;i--) { j>>=1; if(j&p[2]) PR" %d",i); }
PR"\n");
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgUFIgICAgICAodm9pZClwcmludGYoCgptYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKIGludCBuLCB4LCBmciwgdG87CiB1bnNpZ25lZCBpbnQgaSwgaiwgcFszXTsKCiBuID0gYXRvaShhcmd2WzFdKTsKCiBwWzBdPTE7IHBbMF08PD1uOyBwWzBdLS07CiBwWzFdPXBbMl09MDsKCiAvKiBQcmludCBvdXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbjogKi8KIFBSIlxufCIpOwogZm9yKGk9bjtpPjA7aS0tKSBQUiIgJWQiLGkpOwogUFIiXG58XG58XG4iKTsKCiBmb3IoeD0xOyB4IDwgKDEgPDwgbik7IHgrKykgewoKICAgaT14JngtMTsgZnI9KGkraS8zKSYzOwogICBpPSh4fHgtMSkrMTsgdG89KGkraS8zKSYzOwoKICAgZm9yKGk9eCwgaj0xOyA7IGk+Pj0xLCBqPDw9MSkgeyBpZihpJjEpIGJyZWFrOyB9CiAgIC8qIE1vdmUgdGhlIGJpdDogKi8KICAgcFtmcl0gJj0gfmo7CiAgIHBbdG9dIHw9IGo7CgogICAvKiBQcmludCBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgbW92ZSB4OiAqLwogICBQUiJcbnwiKTsgaj0xOyBqPDw9bjsKICAgZm9yKGk9bjtpPjA7aS0tKSB7IGo+Pj0xOyBpZihqJnBbMF0pIFBSIiAlZCIsaSk7IH0KICAgUFIiXG58Iik7IGo9MTsgajw8PW47CiAgIGZvcihpPW47aT4wO2ktLSkgeyBqPj49MTsgaWYoaiZwWzFdKSBQUiIgJWQiLGkpOyB9CiAgIFBSIlxufCIpOyBqPTE7IGo8PD1uOwogICBmb3IoaT1uO2k+MDtpLS0pIHsgaj4+PTE7IGlmKGomcFsyXSkgUFIiICVkIixpKTsgfQogICBQUiJcbiIpOwoKIH0KfQo=