import java.util.Scanner;
/*
* 打印十字
*
* 1 4 9 ((n-1)*2+4)*2+1
* 2 6 13
* 3 8 17
*
*
* 考虑从左上角开始打印打印四分之一,然后进行复制
*
*
* 充分利用图形的对称性,可以分离进行填充(若分离有规律的话),也可以一次性进行填充到一个数组中
* 各个角度观察进行找规律
* 放在一个数组中进行填充
* 最后打印这个数组
*/
public class Main {
public static void show(int n)
{
//中间行的下标
int med = (n-1)*2+4;
int len = ((n-1)*2+4)*2+1;
int l = len - 1;
//定义一个二维数组
char a[][] = new char[len][len];
int i = 0;//单独处理
a[0][0] = a[0][1] = a[1][0] = a[1][1] = '.';
a[0][len-1] = a[0][len-2] = a[1][len-1] = a[1][len-2] = '.';//左右对称
//上下对称
a[l][0] = a[l][1] = a[l-1][0] = a[l-1][1] = '.';
a[l][len-1] = a[l][len-2] = a[l-1][len-1] = a[l-1][len-2] = '.';//左右对称
for(int j = 2;j<=med;j++)
{
a[i][j] = a[j][i] = '$';
a[i][l-j] = a[j][l-i] = '$';//左右对称
//上下对称
a[l-i][j] = a[l-j][i] = '$';
a[l-i][l-j] = a[l-j][l-i] = '$';//左右对称
}
//直接按照规律打印
for(i = 1;i<=med;i++)
{
if(i%2==1)//奇数的情况下
{
a[i][i] = '.';
a[i][l-i] = '.';//左右对称
a[i][i+1] = a[i+1][i] = '$';
a[i][l-(i+1)] = a[i+1][l-i] = '$';//左右对称
//上下对称
a[l-i][i] = '.';
a[l-i][l-i] = '.';//左右对称
a[l-i][i+1] = a[l-i-1][i] = '$';
a[l-i][l-(i+1)] = a[l-i-1][l-i] = '$';//左右对称
for(int j = i+2;j<=med;j++)
{
a[i][j] = a[j][i] = '.';
a[i][l-j] = a[j][l-i] = '.';//左右对称
//上下对称
a[l-i][j] = a[l-j][i] = '.';
a[l-i][l-j] = a[l-j][l-i] = '.';//左右对称
}
}
else
{
a[i][i] = '$';
a[i][l-i] = '$';//左右对称
a[i][i+1] = a[i+1][i] = '.';
a[i][l-(i+1)] = a[i+1][l-i] = '.';//左右对称
//上下对称
a[l-i][i] = '$';
a[l-i][l-i] = '$';//左右对称
a[l-i][i+1] = a[l-i-1][i] = '.';
a[l-i][l-(i+1)] = a[l-i-1][l-i] = '.';//左右对称
for(int j = i+2;j<=med;j++)
{
a[i][j] = a[j][i] = '$';
a[i][l-j] = a[j][l-i] = '$';//左右对称
//上下对称
a[l-i][j] = a[l-j][i] = '$';
a[l-i][l-j] = a[l-j][l-i] = '$';//左右对称
}
}
}
//特殊点处理
a[med][med-1] = a[med-1][med] = a[med+1][med] = a[med][med+1]='$';
for(int r = 0;r<len;r++)
{
for(int c = 0;c<len;c++)
{
System.out.print(a[r][c]);
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
show(in.nextInt());
}
}
华love邵