#include <stdio.h>
int main() {
int n;
while (scanf("%d", &n) != EOF) {
// 树体
// 树体由n层组成,每一层完成i + 1个小树的打印
for (int i = 0; i < n; i++) {
// n = 1 -> 树体第一层第一行前导有2个空格
// n = 2 -> 树体第一层第一行前导有5个空格
// n = 3 -> 树体第一层第一行前导有8个空格
// 第一层第一行 i = 0
// 第n层第一行前导空格数 = (3 * n) - 1 => (3 * n) - 1 - (3 * i)
// n = 1 -> 树体第二层第一行前导有0个空格
// n = 2 -> 树体第二层第一行前导有4个空格
// n = 3 -> 树体第二层第一行前导有5个空格
// 第二层第一行 i = 1
// 第n层第二行前导空格数 = (3 * n) - 1 - 1 => (3 * n) - 1 - (3 * i)
int space = (3 * n) - 1 - (3 * i);
// 第一行空格数
for (int j = 0; j < space; j++) {
printf(" ");
}
// 第一行星号
for (int k = 0; k <= i; k++) {
printf("* ");
}
printf("\n");
// 第二行空格数
for (int j = 0; j < space - 1; j++) {
printf(" ");
}
// 第二行星号;第二行星号打印应重复i + 1次
for (int k = 0; k <= i; k++) {
printf("* * ");
}
printf("\n");
// 第三行空格数
for (int j = 0; j < space - 2; j++) {
printf(" ");
}
// 第三行星号
for (int k = 0; k <= i; k++) {
printf("* * * ");
}
printf("\n");
}
// 树干
// 树干 -> n行
for (int i = 0; i < n; i++) {
// 前导空格:
// n = 1 -> 2个空格
// n = 2 -> 5个空格
// n = 3 -> 8个空格
// 树干前导空格数 = 3 * n - 1
for (int j = 0; j < 3 * n - 1; j++) {
printf(" ");
}
// 星号:
// 无论n取什么值,总为1;输出一个*后直接换行
printf("*\n");
}
}
return 0;
}