若起点为1,要形成回文,则必须终点也为1,两个1之间0的个数任意。

同理,若起点为0,要形成回文,则终点也必须为0,中间1的个数任意。

所以本题的关键在于起点数字的个数是否>=2以构成首与尾。

下面是代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	int T;
	cin>>T;
	while(T--){
		int n,m,one=0,zero=0;
		cin>>n>>m;
		vector<string>a(n);
		for(int i=0;i<n;i++){
			cin>>a[i];
			for(int j=0;j<=m;j++){
				if(a[i][j]=='1')one++;
				else if(a[i][j]=='0')zero++;
			}
		}
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				if(a[i][j]=='1'){
					if(one>=2)cout<<"Y";
					else cout<<"N";
				}
				else if(a[i][j]=='0'){
					if(zero>=2)cout<<"Y";
					else cout<<"N";
				}
			}
			cout<<'\n';
		}
	}
}