func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long M = 1000000000000000003LL;   int n, m;   long long pow2[262144];   char S[262144];   char T[262144];   long long hS[262144][26];   long long hT[262144][26];   long long curh[26];   vector<int> ans;   bool v[26];   inline long long mulmod(long long x, long long y, long long mod) {     return (x * y) - mod * (long long)((long double)x * y / mod);   }   bool check(long long a[26], long long b[26]) {     memset(v, false, sizeof v);     for (int i = 0; i < 26; ++i) {       if (a[i] == 0) continue;       if (v[i]) continue;       if (a[i] == b[i]) {         v[i] = true;         continue;       }       for (int j = 0; j < 26; ++j)         if (a[i] == b[j]) {           if (v[j]) return false;           if (b[i] == a[j]) {             v[j] = true;             v[i] = true;             break;           } else             return false;         }       if (!v[i]) return false;     }     return true;   }   int main() {     pow2[0] = 1;     for (int i = 1; i < 262144; ++i) pow2[i] = pow2[i - 1] * 2ll % M;     scanf( %d%d , &n, &m);     scanf( %s , S + 1);     scanf( %s , T + 1);     for (int i = 1; i <= m; ++i) {       for (int j = 0; j < 26; ++j) hT[i][j] = hT[i - 1][j] * 2ll % M;       (hT[i][T[i] - 97] += 1ll) %= M;     }     for (int i = 1; i <= n; ++i) {       for (int j = 0; j < 26; ++j) hS[i][j] = hS[i - 1][j] * 2ll % M;       (hS[i][S[i] - 97] += 1ll) %= M;     }     for (int i = m; i <= n; ++i) {       for (int j = 0; j < 26; ++j) {         curh[j] = (hS[i][j] - mulmod(hS[i - m][j], pow2[m], M)) % M;         if (curh[j] < 0) curh[j] += M;       }       if (check(hT[m], curh)) ans.push_back(i - m + 1);     }     int sz = ans.size();     printf( %d n , sz);     for (int i = 0; i < sz; ++i) {       printf( %d , ans[i]);       if (i + 1 < sz)         printf(   );       else         printf(  n );     }     return 0;   }   