1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int a[10000][10000];
 4 void huan(int row,int len)
 5 {
 6     int i,j;
 7     for(i=0; i<len/2; i++)
 8     {
 9         for(j=0; j<len/2; j++)
10         {
11             a[row+i+len/2][j+len/2] = a[row+i][j];
12         }
13     }
14     for(i=0; i<len/2; i++)
15     {
16         for(j=0; j<len/2; j++)
17         {
18             a[row+i][j+len/2] = a[row+i+len/2][j];
19         }
20     }
21 }
22 void fd(int row,int len)
23 {
24     if(len!=0)
25     {
26         fd(row,len/2);
27         fd(row+len/2,len/2);
28         huan(row,len);
29     }
30 
31 }
32 
33 int main()
34 {
35     int i,j,n,m=1;
36 
37     scanf("%d",&n);
38     for(i=0; i<n; i++)
39     {
40         m=m*2;
41     }
42     for(i=0; i<m; i++)
43     {
44         a[i][0]=i+1;
45     }
46     fd(0,m);
47     for(i=0; i<m; i++)
48     {
49         for(j=0; j<m-1; j++)
50         {
51             printf("%d ",a[i][j]);
52         }
53         printf("%d",a[i][j]);
54         printf("\n");
55     }
56 
57     return 0;
58 }