func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = (int)2e6 + 7;   char c[N];   struct super_hash {     vector<int> h[2], p[2];     int m[2], b[2];     super_hash(string s, int m1, int m2, int b1, int b2) {       m[0] = m1, m[1] = m2;       b[0] = b1, b[2] = b2;       int n = s.size();       for (int t = 0; t < 2; t++) {         h[t].resize(n + 1);         p[t].resize(n + 1);         p[t][0] = 1;         h[t][0] = 0;         for (int i = 1; i <= n; i++) {           h[t][i] = (h[t][i - 1] * (long long)b[t] + s[i - 1]) % m[t];           p[t][i] = (p[t][i - 1] * (long long)b[t]) % m[t];         }       }     }     pair<int, int> get(int l, int r) {       int res[2];       for (int t = 0; t < 2; t++) {         res[t] = (h[t][r] - (h[t][l] * (long long)p[t][r - l]) % m[t]);         if (res[t] < 0) res[t] += m[t];       }       return {res[0], res[1]};     }   };   bool prime(int x) {     for (int i = 2; i * i <= x; i++)       if (x % i == 0) return false;     return true;   }   int get_prime(int x) {     x += rand();     while (!prime(x)) x--;     return x;   }   int get_mod() { return get_prime(1000000000); }   int get_base() { return get_prime(239); }   map<pair<int, int>, int> num;   string nxt() {     scanf(  %s , c);     return string(c);   }   int main() {     srand(time(NULL));     int m[2], b[2];     for (int t = 0; t < 2; t++) {       m[t] = get_mod();       b[t] = get_base();     }     int n, k;     scanf( %d%d , &n, &k);     vector<int> ans[k];     set<int> res[k];     string s = nxt();     for (int i = 0; i < k; i++) s += s[i];     int g;     scanf( %d , &g);     for (int i = 1; i <= g; i++) {       string t = nxt();       super_hash h(t, m[0], m[1], b[0], b[1]);       num[h.get(0, k)] = i;     }     super_hash h(s, m[0], m[1], b[0], b[1]);     for (int i = 0; i < n * k; i++) {       int f = num[h.get(i, i + k)];       if (!f) continue;       res[i % k].insert(f);       ans[i % k].push_back(f);     }     for (int i = 0; i < k; i++) {       if ((int)res[i].size() == n) {         puts( YES );         for (auto c : ans[i]) {           printf( %d  , c);         }         puts(  );         return 0;       }     }     puts( NO );   }   