func_code_string: #include <bits/stdc++.h>   using namespace std;   int m, n;   string bs[50];   long long component[1000];   long long combo[1001][1001];   long long pseudopart[1001];   bool visited[1000];   int main() {     cin >> m >> n;     for (int i = 0; i < n; i++) cin >> bs[i];     for (int i = 0; i < m; i++)       for (int j = 0; j < n; j++) {         component[i] *= 2LL;         component[i] += (long long)((int)bs[j][i] - (int) 0 );       }     combo[0][0] = 1;     for (int i = 1; i < 1001; i++)       for (int j = 0; j <= i; j++) {         if (j == 0 || j == i)           combo[i][j] = 1;         else           combo[i][j] = combo[i - 1][j] + combo[i - 1][j - 1];         combo[i][j] %= 1000000007;       }     pseudopart[0] = 1;     pseudopart[1] = 1;     for (int i = 2; i <= m; i++) {       for (int j = 0; j < i; j++) {         pseudopart[i] += combo[i - 1][j] * pseudopart[i - 1 - j];         pseudopart[i] %= 1000000007;       }     }     long long ans = 1;     for (int i = 0; i < m; i++) {       if (visited[i]) continue;       long long temp = 0;       for (int j = 0; j < m; j++)         if (component[j] == component[i]) {           visited[j] = true;           temp++;         }       ans *= pseudopart[temp];       ans %= 1000000007;     }     cout << ans << endl;   }   