#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; string dir = "NESW"; int dx[] = {0 , 1 , 0 , -1}; int dy[] = {1 , 0 , -1 , 0}; const int INF = 1<<28; int main() { int t; cin >> t; while(t--) { int h,w; cin >> h >> w; vector dat(h); for(int i = 0 ; i < h; i++) cin >> dat[i]; int minX[27],minY[27],maxX[27],maxY[27]; fill(minX , minX + 27 , INF); fill(maxX , maxX + 27 , -INF); fill(minY , minY + 27 , INF); fill(maxY , maxY + 27 , -INF); bool flg[27] ; fill(flg , flg + 27 , true); for(int i = 0 ; i < h; i++) for(int j = 0 ; j < w ; j++) { if(dat[i][j]=='.') continue; int idx = dat[i][j] - 'A'; minX[idx] ?= j ; minY[idx] ?= i ; flg[dat[i][j]-'A'] = false; } bool safe = true; bool yet = true; while(1) { int Maxidx = -1; for(int i = 0 ; i < 26 ; i++) { if(flg[i]) continue; if(minX[i]==INF) continue; bool front = true; for(int j = minX[i] ; j <= maxX[i] && front; j++) for(int k = minY[i] ; k <= maxY[i] ; k++) { if(dat[k][j]==(char)(i+'A') || dat[k][j]==' '){ }else{ front = false; break; } } if(front) { flg[i]=true; Maxidx = i ; break; } } if(Maxidx == -1) break; for(int j = minX[Maxidx] ; j <= maxX[Maxidx]; j++) for(int k = minY[Maxidx] ; k <= maxY[Maxidx] ; k++) { dat[k][j] = ' '; } //copy(dat.begin(),dat.end(),ostream_iterator(cout,"\n")); } safe = (find(flg , flg + 27 , false) == flg+27); puts(safe?"SAFE":"SUSPICIOUS"); } return 0; }