/*
* 算法竞赛入门经典:8.3.2 循环日程表问题
* */
import java.util.Scanner;
public class CycSchedule {
public int[][] arr;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
CycSchedule cs = new CycSchedule();
int k;
while ((k = scanner.nextInt()) > 0) {
int n = 1 << k;
cs.arr = new int[n][n];
cs.dfs(n);
cs.print();
}
}
public void dfs(int n) {
if (n == 2) {
arr[0][0] = 1;
arr[1][0] = 2;
arr[0][1] = arr[1][0];
arr[1][1] = arr[0][0];
return;
} else {
dfs(n / 2);
}
int x = n / 2;
int y = n / 2;
for (int i = x; i < n; i++) {
for (int j = 0; j < y; j++) {
arr[i][j] = arr[i - x][j] + x;
}
}
for (int i = x; i < n; i++) {
for (int j = y; j < n; j++) {
arr[i][j] = arr[i - x][j - y];
}
}
for (int i = 0; i < x; i++) {
for (int j = y; j < n; j++) {
arr[i][j] = arr[j][i];
}
}
}
public void print() {
for (int i = 0; i < arr.length; i++) {
for (int j = 1; j < arr.length; j++) {
System.out.printf("%-3d", arr[i][j]);
}
System.out.println();
}
}
}