func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long int INF = 2000000000000000000;   long long int MOD(long long int a, long long int b) {     if (a > b)       return a - b;     else       return b - a;   }   long long int max3(long long int a, long long int b, long long int c) {     return max(c, max(a, b));   }   long long int min3(long long int a, long long int b, long long int c) {     return min(a, min(b, c));   }   long long int power(long long int x, long long int y) {     long long int res = 1;     while (y > 0) {       if (y & 1) res = (res * x) % 1000000007;       y = y >> 1;       x = (x * x) % 1000000007;     }     return res;   }   long long int logg(long long int a) {     long long int x = 0;     while (a > 1) {       x++;       a /= 2;     }     return x;   }   long long int gcd(long long int a, long long int b) {     if (a == 0) return b;     return gcd(b % a, a);   }   int main() {     int n, m;     cin >> n >> m;     vector<string> grid;     grid.resize(n);     for (int i = 0; i < n; i++) {       cin >> grid[i];     }     vector<int> columns;     columns.resize(n, 0);     vector<int> rows;     rows.resize(m, 0);     for (int i = 0; i < n; i++) {       vector<int> cnt;       for (int j = 0; j < m; j++) {         if (grid[i][j] ==  # ) {           cnt.push_back(j);         }       }       if (!cnt.empty()) {         vector<int> b;         for (int j = 0; j < n; j++) {           if (grid[j][cnt[0]] ==  # ) {             b.push_back(j);           }         }         sort(b.begin(), b.end());         sort(cnt.begin(), cnt.end());         for (int j = 0; j < cnt.size(); j++) {           int num = 0;           for (int i = 0; i < n; i++) {             if (grid[i][cnt[j]] ==  #  &&                 binary_search(b.begin(), b.end(), i) == false) {               cout <<  NO ;               return 0;             } else {               if (grid[i][cnt[j]] ==  # ) {                 num++;               }             }           }           if (num != b.size()) {             cout <<  NO ;             return 0;           }         }         for (int i = 0; i < b.size(); i++) {           int num = 0;           for (int j = 0; j < m; j++) {             if (grid[b[i]][j] ==  #  &&                 binary_search(cnt.begin(), cnt.end(), j) == false) {               cout <<  NO ;               return 0;             } else {               if (grid[b[i]][j] ==  # ) {                 num++;               }             }           }           if (num != cnt.size()) {             cout <<  NO ;             return 0;           }         }       }     }     cout <<  YES ;     return 0;   }   