/* -*- coding: utf-8 -*- * * 179.cc: No.179 塗り分け - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_H = 50; const int MAX_W = 50; /* typedef */ /* global variables */ bool flds[MAX_H][MAX_W], used[MAX_H][MAX_W]; /* subroutines */ /* main */ int main() { int h, w; cin >> h >> w; int hw = h * w, bn = 0; for (int y = 0; y < h; y++) { string s; cin >> s; for (int x = 0; x < w; x++) { if (s[x] == '#') flds[y][x] = true, bn++; else flds[y][x] = false; } } if (bn == 0 || (bn & 1) != 0) { puts("NO"); return 0; } for (int dy = 0; dy < h; dy++) for (int dx = -(w - 1); dx < w; dx++) { if (dx == 0 && dy == 0) continue; memset(used, false, sizeof(used)); bool ok = true; for (int y = 0; ok && y < h; y++) for (int x = 0; ok && x < w; x++) if (flds[y][x] && ! used[y][x]) { used[y][x] = true; int x0 = x + dx, y0 = y + dy; if (x0 >= 0 && x0 < w && y0 < h && flds[y0][x0]) used[y0][x0] = true; else ok = false; } if (ok) { puts("YES"); return 0; } } puts("NO"); return 0; }