func_code_string: #include <bits/stdc++.h>   using namespace std;   int main() {     int m, n;     cin >> m >> n;     vector<string> nums(n);     for (int i = 0; i < (int)(n); ++i) cin >> nums[i];     vector<long long> c(m, 1);     for (int i = 0; i < (int)(m); ++i) {       for (int j = 0; j < (int)(i); ++j) {         int match = 1;         for (int k = 0; k < (int)(n); ++k) {           if (nums[k][i] != nums[k][j]) {             match = 0;             break;           }         }         if (match) {           c[i] = 0;           c[j]++;           break;         }       }     }     vector<vector<long long> > choose(m + 1, vector<long long>(m + 1, 0));     for (int i = 0; i < (int)(m + 1); ++i) {       choose[i][0] = 1;       choose[i][i] = 1;       for (int j = 0; j < (int)(m + 1); ++j) {         if (i && j)           choose[i][j] = (choose[i - 1][j] + choose[i - 1][j - 1]) % 1000000007;       }     }     vector<long long> dp(m + 1);     dp[0] = 1;     for (int i = 0; i < (int)(m + 1); ++i) {       if (i) {         for (int j = 0; j < (int)(i); ++j) {           dp[i] += (choose[i - 1][j] * dp[i - 1 - j]) % 1000000007;           dp[i] %= 1000000007;         }       }     }     long long ans = 1;     for (int i = 0; i < (int)(m); ++i) {       if (c[i]) ans = (ans * dp[c[i]]) % 1000000007;     }     cout << ans << endl;     return 0;   }   