#include <iostream>
#include <stdio.h>
using namespace std;
char star[2187][2187];
int blank(int r, int c, int d) {
for (int t1 = r; t1 < r+d; t1++)
for (int t2 = c; t2 < c + d; t2++)
star[t1][t2] = ' ';
return 0;
}
int stemp(int N, int row, int col) {
// 이 부분 없으면 메모리 초과
if (N < 3)
return 0;
int div = N / 3;
// row과 col을 각각 3부분으로 분리하여 3x3 형태로 만든다.
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
// 3x3에서 중심이면 ' '을 할당
if (i == 1 && j == 1)
blank(row + div, col + div, div);
// 재귀함수를 사용해 중심을 제외한 나머지들의 중심을 찾아 ' '으로 바꾼다.
else
stemp(div, row + div * i, col + div * j);
}
}
}
int main() {
int N;
scanf("%d", &N);
// 배열 원소 모두 '*'으로 초기화
for (int i = 0; i <= N; i++) {
for (int j = 0; j <= N; j++) {
star[i][j] = '*';
}
}
// 함수 호출
stemp(N, 0, 0);
// 결과 출력
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%s", star[i][j]);
}
printf("\n");
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgpjaGFyIHN0YXJbMjE4N11bMjE4N107CgppbnQgYmxhbmsoaW50IHIsIGludCBjLCBpbnQgZCkgewoJZm9yIChpbnQgdDEgPSByOyB0MSA8IHIrZDsgdDErKykKCQlmb3IgKGludCB0MiA9IGM7IHQyIDwgYyArIGQ7IHQyKyspCgkJCXN0YXJbdDFdW3QyXSA9ICcgJzsKCglyZXR1cm4gMDsKfQoKaW50IHN0ZW1wKGludCBOLCBpbnQgcm93LCBpbnQgY29sKSB7CgoJLy8g7J20IOu2gOu2hCDsl4bsnLzrqbQg66mU66qo66asIOy0iOqzvAoJaWYgKE4gPCAzKQoJCXJldHVybiAwOwoKCWludCBkaXYgPSBOIC8gMzsKCgkvLyByb3fqs7wgY29s7J2EIOqwgeqwgSAz67aA67aE7Jy866GcIOu2hOumrO2VmOyXrCAzeDMg7ZiV7YOc66GcIOunjOuToOuLpC4KCWZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CQkJCQkKCQlmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKykgewkKCgkJCS8vIDN4M+yXkOyEnCDspJHsi6zsnbTrqbQgJyAn7J2EIO2VoOuLuQoJCQlpZiAoaSA9PSAxICYmIGogPT0gMSkKCQkJCWJsYW5rKHJvdyArIGRpdiwgY29sICsgZGl2LCBkaXYpOwoJCQkKCQkJLy8g7J6s6reA7ZWo7IiY66W8IOyCrOyaqe2VtCDspJHsi6zsnYQg7KCc7Jm47ZWcIOuCmOuouOyngOuTpOydmCDspJHsi6zsnYQg7LC+7JWEICcgJ+ycvOuhnCDrsJTqvrzri6QuCgkJCWVsc2UKCQkJCXN0ZW1wKGRpdiwgcm93ICsgZGl2ICogaSwgY29sICsgZGl2ICogaik7CQoJCX0KCX0KfQoKaW50IG1haW4oKSB7CgoJaW50IE47CglzY2FuZigiJWQiLCAmTik7CgoJLy8g67Cw7Je0IOybkOyGjCDrqqjrkZAgJyon7Jy866GcIOy0iOq4sO2ZlAoJZm9yIChpbnQgaSA9IDA7IGkgPD0gTjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPD0gTjsgaisrKSB7CgkJCQlzdGFyW2ldW2pdID0gJyonOwoJCX0KCX0KCgkvLyDtlajsiJgg7Zi47LacCglzdGVtcChOLCAwLCAwKTsKCgkvLyDqsrDqs7wg7Lac66ClCglmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewoJCWZvciAoaW50IGogPSAwOyBqIDwgTjsgaisrKSB7CgkJCXByaW50ZigiJXMiLCBzdGFyW2ldW2pdKTsKCQl9CgkJcHJpbnRmKCJcbiIpOwoJfQp9