#include <stdio.h>
int n;
int a[100], b[100], c[100];
void myprint()
{
for (int i = 1; i <= n; i++)
printf("\n%4d%4d%4d\n", a[i],b[i],c[i]);
printf("\n ------------------ \n ");
}
void muta(int *x, int *y)
{
int k = 1, z;
while (! x[k]) k++;
z = x[k]; x[k] = 0;
k = n;
while(y[k]) k--;
y[k] = z;
}
void Hanoi (int *a, int *c, int *b, int k)
{
if (k== 1) { muta (a, c); myprint();} // cazul elementar
else
{
Hanoi(a, b, c, k-1); // mutam n-1 pe b
muta(a, c); // mutam ultimul disc pe c
myprint();
Hanoi(b, c, a, k-1); // mutam n-1 de pe b pe c
}
}
int main()
{
scanf("%d", &n);
// initializarea a
for (int i = 1; i <= n; i++) a[i] = i, b[i] = c[i] = 0;
myprint();
// rezolvare
Hanoi(a, c, b, n);
return 0;
}