#include <bits/stdc++.h>
using namespace std;

//2^10=1024
int a[1030][1030];

void paint(int x1, int y1, int x2, int y2) {
	//涂 只涂左上角
	//同时避免出现右下角单个数被涂 加上if判断 也就是说 操作最小单元是2*2的
	if (x2 - x1 >= 1 && y2 - y1 >= 1) {
		//注意i起始不是1而是x1,j起始不是1而是y1
		for (int i = x1; i <= (x1 + x2) / 2; i++) {
			for (int j = y1; j <= (y1 + y2) / 2; j++) {
				a[i][j] = 0;
			}
		}
	}

	//涂剩下3个的左上角
	if (x1 != x2 && y1 != y2) {

		//涂右上方块
		paint(x1, (y1 + y2) / 2, (x1 + x2) / 2, y2);

		//涂左下方块
		paint((x1 + x2) / 2, y1, x2, (y1 + y2) / 2);

		//涂右下方块
		//别忘了+1 不+1就涂到左上的边了
		paint((x1 + x2) / 2 + 1, (y1 + y2) / 2 + 1, x2, y2);
	}
}

int main() {
	int n;
	cin >> n;

	//先涂满1
	for (int i = 1; i <= pow(2, n); i++) {
		for (int j = 1; j <= pow(2, n); j++) {
			a[i][j] = 1;
		}
	}

	//开始涂0
	paint(1, 1, pow(2, n), pow(2, n));

	//输出
	for (int i = 1; i <= pow(2, n); i++) {
		for (int j = 1; j <= pow(2, n); j++) {
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}