#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; static const double EPS = 1e-8; static const double PI = 4.0 * atan(1.0); static const double PI2 = 8.0 * atan(1.0); #define REP(i,n) for(int i=0;i<(int)n;++i) #define ALL(c) (c).begin(),(c).end() #define CLEAR(v) memset(v,0,sizeof(v)) #define MP(a,b) make_pair((a),(b)) #define ABS(a) ((a)>0?(a):-(a)) #define FOR(i,s,n) for(int i=s;i<(int)n;++i) #define YES "YES" #define NO "NO" int H, W; char C[50][50]; int main(int argc, char **argv) { cin >> H >> W; REP(y, H) REP(x, W) cin >> C[x][y]; int cnt = 0; REP(x, W) REP(y, H) if (C[x][y] == '#') ++cnt; if (cnt == 0 || cnt % 2 != 0) { cout << NO << endl; return 0; } FOR(dx, -W + 1, W) FOR(dy, -H + 1, H) { if (dx == 0 && dy == 0) continue; set used; bool f = true; REP(x, W) { REP(y, H) { if (C[x][y] == '#' && used.count(y * W + x) == 0) { if (x + dx < 0 || y + dy < 0 || x + dx >= W || y + dy >= H || C[x + dx][y + dy] != '#') { f = false; break; } used.insert((y + dy) * W + x + dx); } } if (!f) break; } if (f && used.size() * 2 == cnt) { cout << YES << endl; return 0; } } cout << NO << endl; return 0; }