题目
#include<bits/stdc++.h>
using namespace std;
const int maxn = 205;
int a[maxn][maxn], n, m;
int r[maxn], c[maxn], b[maxn], maxr[maxn], maxc[maxn], minr[maxn], minc[maxn];
bool vis[maxn];
void print(int x){
if(x == -1) cout << "NSFW\n";
else if(x == 0) cout << "FOX\n";
else cout << "CAT\n";
}
void init(){
for(int i = 1; i <= maxn - 5; i++){
maxr[i] = maxc[i] = 0;
minr[i] = minc[i] = 1e9;
}
}
int op_times(int n){
for(int i = 1; i <= n; i++){
vis[i] = 0;
}
int cnt = 0;
for(int i = 1; i <= n; i++){
if(!vis[i]){
cnt++;
int j = i;
while(!vis[j]){
vis[j] = 1;
j = r[j];
}
}
}
return n - cnt;
}
bool no_win(){
for(int j = 1; j <= m; j++){
for(int i = 1; i <= n; i++){
if(i >= 2 && j >= 2)
if((a[i][j] - a[i][j - 1]) != (a[i - 1][j] - a[i - 1][j - 1])){
return 1;
}
maxr[i] = max(maxr[i], a[i][j]);
maxc[j] = max(maxc[j], a[i][j]);
minr[i] = min(minr[i], a[i][j]);
}
}
int i;
for(i = 1; i <= n; i++){
r[i] = maxr[i];
b[i] = r[i];
}
sort(b + 1, b + n + 1);
for(int i = 1; i <= n; i++){
r[i] = lower_bound(b + 1, b + n + 1, r[i]) - b;
}
for(int i = 1; i <= n; i++){
if(minr[i] != (r[i] - 1) * m + 1 || maxr[i] != r[i] * m){//不用minr判断也可以
return 1;
}
}
return 0;
}
bool check(){
int last = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(a[i][j] < last) return 0;
last = a[i][j];
}
}
return 1;
}
void solve(){
int i, j;
cin >> n >> m;
init();
for(i = 1; i <= n; i++){
for(j = 1; j <= m; j++){
cin >> a[i][j];
}
}
if(no_win()){
print(-1);
return;
}
int cntr = op_times(n), cntc;
for(j = 1; j <= m; j++){
r[j] = maxc[j];
b[j] = r[j];
}
sort(b + 1, b + m + 1);
for(int i = 1; i <= m; i++){
r[i] = lower_bound(b + 1, b + m + 1, r[i]) - b;
}
cntc = op_times(m);
if(cntr == 1 && cntc == 0){
print(0);
return;
}
if(n == 2 && m == 2){
if((cntr + cntc) % 2 == 0) print(1);
else print(0);
}
else if(n == 2){
if((cntr + cntc) % 2 == 0) print(1);
else print(-1);
}
else if(m == 2){
if((cntr + cntc) % 2 == 1) print(0);
else print(-1);
}
else print(-1);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
while(T--){
solve();
}
return 0;
}