B - 在上厕所

B - 在上厕所

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

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

Sponsor

//只要不发癔症就能写对的题(别问,问就是考试没写对)
#include <iostream>
using namespace std;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t;
	cin >> t;
	int sum1 = 0, sum2 = 0;
	while (t--) {
		sum1 = 0, sum2 = 0;
		char map[401][401] = { 0 };
		char place[401][401] = { 0 };
		int n;
		cin >> n;
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				cin >> map[i][j];
				if (map[i][j] == '*') {
					place[i][j] = 1;//记录地图每一点的状态
				}
			}
		}
		int x1, y1, x2, y2;
		int k = 0, low = 0;
		for (int i = 0; i < n; i++) {
			sum1 = 0;
			for (int j = 0; j < n; j++) {
				if (map[i][j] == '*')
					sum1++, k++;
				if (sum1 == 1 && k == 1 && low == 0) {
					x1 = i, y1 = j;
					low = 1;
				}
				if (sum1 >= 1 && k == 2) {
					x2 = i, y2 = j;
					break;
				}
			}
			if (sum1 == 2) break;
		}
		if (x1 != x2 && y1 != y2) {//俩点既不在同一水平线上也不再同一竖直线上,下面同理
			map[x1][y2] = '*';
			map[x2][y1] = '*';
		}
		else {
			if (x1 == x2 && y1 == y2) {
				if (x1 == 0) map[x1][y1 + 1] = '*';
				else map[x1][y1 - 1] = '*';
			}
			else if (x1 == x2 && y1 != y2) {
				if (x1 == 0) map[x1 + 1][y1] = map[x2 + 1][y2] = '*';
				else map[x1 - 1][y1] = map[x2 - 1][y2] = '*';
			}
			else {
				if (y1 == 0) map[x1][y1 + 1] = map[x2][y2 + 1] = '*';
				else map[x1][y1 - 1] = map[x2][y2 - 1] = '*';
			}
		}
		for (int i = 0; i < n; i++) {
			cout << map[i];
			cout << endl;
		}
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿白|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值