func_code_string: #include <bits/stdc++.h>   using namespace std;   const unsigned long long base = 133;   unsigned long long hash1[200005][26], hash2[200005][26], Pow[200005];   int n, m;   char str1[200005], str2[200005];   int main() {     scanf( %d%d , &n, &m);     scanf( %s%s , str1 + 1, str2 + 1);     Pow[0] = 1;     for (int i = 1; i <= n; i++) {       Pow[i] = Pow[i - 1] * base;     }     for (int i = 0; i < 26; i++) {       for (int j = 1; j <= n; j++) {         hash1[j][i] = hash1[j - 1][i] * base + (str1[j] -  a  == i);       }     }     for (int i = 0; i < 26; i++) {       for (int j = 1; j <= m; j++) {         hash2[j][i] = hash2[j - 1][i] * base + (str2[j] -  a  == i);       }     }     vector<int> vec;     for (int i = 1; i <= n - m + 1; i++) {       int cnt = 0;       for (int x = 0; x < 26; x++) {         if (cnt != x) break;         for (int y = 0; y < 26; y++) {           if (hash2[m][x] == hash1[i + m - 1][y] - hash1[i - 1][y] * Pow[m]) {             if (hash2[m][y] == hash1[i + m - 1][x] - hash1[i - 1][x] * Pow[m]) {               cnt++;               break;             }           }         }       }       if (cnt == 26) vec.push_back(i);     }     int sz = vec.size();     printf( %d n , sz);     for (int i = 0; i < sz; i++) {       printf( %d  , vec[i]);     }     return 0;   }   