寒假训练周赛2--Almost Rectangle

题目

 

OHgg 获得了一个大小等于 n \times nn×n 的正方形方阵,方针内有两个单元格被画上了星星,也就是被标记了. 这两个单元格可以在相同的位置(即同行同列).

他需要再给两个单元格画上星星,让这四个带星星的单元格表示为与坐标轴平行的矩形的四个角

例如,如果 n=4n=4 并且这个矩阵看起来是这样的 (用星号标记了两个单元格):

\begin{matrix} . & * & . & . \\ . & . & . & . \\ * & . & . & . \\ . & . & . & . \\ \end{matrix}..∗.​∗...​....​....​

那么他可以这样再多给两个单元格画上星星

\begin{matrix} * & * & . & . \\ . & . & . & . \\ * & * & . & . \\ . & . & . & . \\ \end{matrix}∗.∗.​∗.∗.​....​....​

如果有多个解决方案,输出任意一个都可以。

Input

第一行有一个整数 tt (1 \le t \le 4001≤t≤400). 接下来是 tt 个测试样例.

每个测试用例的第一行包含一个整数 nn (2 \le n \le 4002≤n≤400) — 矩阵的行和列的数量

接下来 nn 行分别包含 nn 个字符 '.' 或者 '*' 表示空单元格和标记单元格.

保证所有测试样例 nn 的和不超过 400400.

保证矩阵上正好有两个星号。它们可以在同一行或同一列.

保证存在解决方案.

Output

对于每个测试样里,输出 nn 行,每行 nn 个字符 — 与输入内容相对应且带有四个星号的矩阵. 如果有多个正确答案输出任意一个即可.

Example

Input

6
4
..*.
....
*...
....
2
*.
.*
2
.*
.*
3
*.*
...
...
5
.....
..*..
.....
.*...
.....
4
....
....
*...
*...

Output

*.*.
....
*.*.
....
**
**
**
**
*.*
*.*
...
.....
.**..
.....
.**..
.....
....
....
**..
**..

代码

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

int main()
{
   int t,n;
   cin >>t;
   while(t--)
   {
       char a[405][405]={0};
       int ai[2]={0},bi[2]={0};
       cin >>n;
       int i,j;
       int a1=0,b1=0;
       for(i=0;i<n;i++)
        for(j=0;j<n;j++)
       {
           cin >>a[i][j];
           if(a[i][j]=='*')
           {
               ai[a1++]=i;//储存*的横纵坐标
               bi[b1++]=j;
           }

       }
       if(bi[0]==bi[1]&&bi[0]==n-1)/.*
                                   /.*这种情况
       {

            a[ai[0]][bi[0]-1]='*';
            a[ai[1]][bi[0]-1]='*';

       }
       else if(bi[0]==bi[1]&&bi[0]==0)题中n==4时
       {
            a[ai[0]][bi[0]+1]='*';
            a[ai[1]][bi[0]+1]='*';
       }
         else if(bi[0]==bi[1])/在中间时
       {
            a[ai[0]][bi[0]+1]='*';
            a[ai[1]][bi[0]+1]='*';
       }
       else if(ai[0]==ai[1]&&ai[0]==0)//题中n==3时
       {
           a[ai[0]+1][bi[0]]='*';
            a[ai[0]+1][bi[1]]='*';
       }
       else if(ai[0]==ai[1]&&ai[0]==n-1)//俩*号在底边且挨着
       {
            a[ai[0]-1][bi[0]]='*';
            a[ai[0]-1][bi[1]]='*';
       }
        else if(ai[0]==ai[1])//在中间挨着
       {
            a[ai[0]-1][bi[0]]='*';
            a[ai[0]-1][bi[1]]='*';
       }
       else
       {
       a[ai[0]][bi[0]]='*';//不挨着的情况
       a[ai[1]][bi[0]]='*';
       a[ai[0]][bi[1]]='*';
       a[ai[1]][bi[1]]='*';
       }

       for(i=0;i<n;i++)
       {
           for(j=0;j<n;j++)//输出图像
           cout << a[i][j] ;
           cout <<endl;
       }

   }
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值