func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   #pragma GCC optimize(2)   #pragma GCC optimize(3)   const int N = 1e6 + 10, p1 = 1e9 + 7, p2 = 1e9 + 9;   int n, k, len;   char s[N << 1], ch;   int strhash[N][2], hashbase[2], hashpow[2] = {1, 1}, tmp[2];   std::map<std::pair<int, int>, int> mp;   std::set<int> st;   int main() {     int i, j, q;     srand(time(NULL));     scanf( %d%d , &n, &k);     len = n * k;     for (i = 1; i <= len; i++) {       do s[i] = getchar();       while (s[i] <  a  || s[i] >  z );       s[len + i] = s[i];     }     hashbase[0] = (long long)rand() * rand() % p1,     hashbase[1] = (long long)rand() * rand() % p2;     for (i = 1; i <= k; i++) {       if (i > 1)         hashpow[0] = (long long)hashpow[0] * hashbase[0] % p1,         hashpow[1] = (long long)hashpow[1] * hashbase[1] % p2;       strhash[1][0] = ((long long)strhash[1][0] * hashbase[0] % p1 + s[i]) % p1,       strhash[1][1] = ((long long)strhash[1][1] * hashbase[1] % p2 + s[i]) % p2;     }     for (i = 2; i <= len; i++)       strhash[i][0] =           ((strhash[i - 1][0] - (long long)s[i - 1] * hashpow[0] % p1 + p1) % p1 *                hashbase[0] % p1 +            s[i + k - 1]) %           p1,       strhash[i][1] =           ((strhash[i - 1][1] - (long long)s[i - 1] * hashpow[1] % p2 + p2) % p2 *                hashbase[1] % p2 +            s[i + k - 1]) %           p2;     scanf( %d , &q);     for (i = 1; i <= q; i++) {       tmp[0] = tmp[1] = 0;       for (j = 1; j <= k; j++) {         do ch = getchar();         while (ch <  a  || ch >  z );         tmp[0] = ((long long)tmp[0] * hashbase[0] % p1 + ch) % p1,         tmp[1] = ((long long)tmp[1] * hashbase[1] % p2 + ch) % p2;       }       if (mp[std::make_pair(tmp[0], tmp[1])]) return 233;       mp[std::make_pair(tmp[0], tmp[1])] = i;     }     int tmp;     for (i = 1; i <= k; i++) {       st.clear();       for (j = 0; j < n; j++) {         tmp = mp[std::make_pair(strhash[(i + j * k - 1) % len + 1][0],                                 strhash[(i + j * k - 1) % len + 1][1])];         if (!tmp || st.count(tmp))           break;         else           st.insert(tmp);       }       if (j == n) {         puts( YES );         for (j = 0; j < n; j++)           printf( %d  ,                  mp[std::make_pair(strhash[(i + j * k - 1) % len + 1][0],                                    strhash[(i + j * k - 1) % len + 1][1])]);         return 0;       }     }     puts( NO );     return 0;   }   