func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2 * 1000 * 100 + 10, Z = 26, P = 2, mod = 1e9 + 9;   int pw[N], wp[N], n, m, tar[Z], hsh[N][Z];   string s, t;   long long Pow(long long a, long long b) {     return b ? (b & 1 ? a : 1) % mod * Pow(a * a % mod, b >> 1) % mod : 1;   }   int add(int a, int b) {     a += b;     a += (a < 0) * mod;     a -= (a >= mod) * mod;     return a;   }   int mul(int a, int b) { return 1LL * a * b % mod; }   int main() {     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);     pw[0] = 1;     for (int i = 1; i < N; i++) pw[i] = mul(pw[i - 1], P);     wp[N - 1] = Pow(pw[N - 1], mod - 2);     for (int i = N - 2; i >= 0; i--) wp[i] = mul(wp[i + 1], P);     cin >> n >> m >> s >> t;     for (int i = 0; i < m; i++)       for (int j = 0; j < Z; j++)         tar[j] = add(tar[j], mul(pw[i], t[i] -  a  == j));     vector<pair<int, int>> targ;     for (int i = 0; i < Z; i++) targ.push_back({tar[i], i});     sort(targ.begin(), targ.end());     for (int i = 1; i <= n; i++)       for (int j = 0; j < Z; j++)         hsh[i][j] = add(hsh[i - 1][j], mul(pw[i - 1], s[i - 1] -  a  == j));     vector<int> o;     for (int i = 0; i + m <= n; i++) {       bool res = true;       vector<pair<int, int>> me;       for (int j = 0; j < Z; j++) {         int val = mul(add(hsh[i + m][j], -hsh[i][j]), wp[i]);         me.push_back({val, j});       }       sort(me.begin(), me.end());       for (int i = 0; i < Z; i++) res &= me[i].first == targ[i].first;       set<pair<int, int>> st;       set<int> NO;       for (int i = 0; i < Z; i++) {         if (me[i].first == 0) continue;         if (me[i].second != targ[i].second)           if (me[i].second < targ[i].second)             st.insert({me[i].second, targ[i].second});           else             st.insert({targ[i].second, me[i].second});         else           NO.insert(me[i].second);       }       set<int> F, S;       for (auto it : st) F.insert(it.first), S.insert(it.second);       res &= (int)(F.size()) == (int)(st.size());       res &= (int)(S.size()) == (int)(st.size());       for (auto it : st) S.insert(it.first);       res &= (int)(S.size()) == ((int)(st.size()) * 2);       for (auto it : S) res &= !NO.count(it);       if (res) o.push_back(i + 1);     }     cout << (int)(o.size()) <<   n ;     for (auto i : o) cout << i <<    ;     cout <<   n ;     return 0;   }   