#include using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) vector> a; int h,w; bool Isvalid(int x,int y,vector> &Isseen){//ある平行移動がvaildか bool flag = 1; rep(i,h)rep(j,w){ if(a[i][j]=='.') continue;//すべての黒ますについて if(Isseen[i][j]) continue;//もしすでに見ていたらcontinue Isseen[i][j] = 1; //訪問済みにする int nowx = x+i,nowy = y+j;//平行移動先 if(nowx<0||h<=nowx||nowy<0||w<=nowy){//はみ出したらダメ flag = 0; break; } if(a[nowx][nowy]=='.'){//移動先が白でもダメ flag = 0; break; } if(Isseen[nowx][nowy]){ flag = 0;//移動先が訪問済みでもダメ break; } Isseen[nowx][nowy] = 2;//移動先を訪問済みにする } return flag; } int main(void){ cin >> h >> w; a.resize(h,vector (w)); rep(i,h)rep(j,w) cin >> a[i][j]; rep(i,h)rep(j,w){ if(i==0&&j==0) continue; vector> Isseen(h,vector (w,0)); if(Isvalid(i,j,Isseen)){ //cout << i << j << endl; cout << "YES" << endl; //rep(i,h){ // rep(j,w) cout << Isseen[i][j]; // cout << endl; //} return 0; } } cout << "NO" << endl; }