func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /stack:200000000 )   #pragma GCC optimize( Ofast,no-stack-protector )   #pragma GCC target( avx )   using namespace std;   template <class T>   int getbit(T s, int i) {     return (s >> i) & 1;   }   template <class T>   T onbit(T s, int i) {     return s | (T(1) << i);   }   template <class T>   T offbit(T s, int i) {     return s & (~(T(1) << i));   }   template <class T>   int cntbit(T s) {     return __builtin_popcount(s);   }   template <class T>   T gcd(T a, T b) {     T r;     while (b != 0) {       r = a % b;       a = b;       b = r;     }     return a;   }   template <class T>   T lcm(T a, T b) {     return a / gcd(a, b) * b;   }   const int MAXN = 100;   const int MOD = 1e9 + 7;   const long long MAXV = 1e6;   const double eps = 1e-12;   const long long INF = 1e16;   inline string toStr(long long x) {     string tmp =   ;     do tmp = char(x % 10 +  0 ) + tmp;     while (x /= 10);     return tmp;   }   inline long long toInt(string s) {     long long res = 0;     for (auto x : s) res = res * 10 + x -  0 ;     return res;   }   inline string toBinStr(long long x) {     string res =   ;     do res = (x % 2 ?  1  :  0 ) + res;     while (x >>= 1LL);     return res;   }   long long rnd(int k) {     if (!k) return rand() % MAXV + 1;     long long t = rand() % MAXV + 1;     return (rand() % t) + (MAXV - t);   }   long long random_gen(int sign) {     long long x = rnd(rand() % 2);     long long s = rand() % 2;     s = !s ? 1 : -1;     return sign == 1 ? x : sign == -1 ? -x : s * x;   }   inline void debugArray(int a[], int n) {     cerr <<  array =  ;     for (int i = 0; i < n; ++i) cerr << a[i] <<    ;     cerr <<   n ;   }   int n, m;   vector<int> row[MAXN];   bool color[MAXN];   string s[MAXN], actual[MAXN];   int main() {     cin >> n >> m;     for (int i = 0, _a = (n); i < _a; ++i) {       cin >> s[i];       for (int j = 0, _a = (m); j < _a; ++j)         if (s[i][j] ==  # ) row[i].push_back(j);     }     for (int i = 0, _a = (n); i < _a; ++i) {       actual[i] =   ;       for (int j = 0, _a = (m); j < _a; ++j) actual[i] +=  . ;     }     for (int i = 0, _a = (n); i < _a; ++i)       if (!color[i]) {         vector<int> need;         color[i] = true;         need.push_back(i);         for (int j = 0, _a = (n); j < _a; ++j)           if (!color[j])             for (int k = 0, _a = (m); k < _a; ++k)               if (s[i][k] ==  #  && s[j][k] ==  # ) {                 need.push_back(j);                 color[j] = true;                 break;               }         for (auto x : need)           for (auto y : row[i]) actual[x][y] =  # ;       }     bool good = true;     for (int i = 0, _a = (n); i < _a; ++i)       for (int j = 0, _a = (m); j < _a; ++j) good &= actual[i][j] == s[i][j];     puts(good ?  Yes  :  No );   }   