func_code_string: #include <bits/stdc++.h>   using namespace std;   string s[3];   int N, M, p[3][1000005], a[3][1000005], b[1000005];   void genPrefix(int pat) {     int i, k;     p[pat][0] = 0;     k = 0;     i = 1;     while (i < M) {       if (s[pat][i] == s[pat][k]) {         k++;         p[pat][i] = k;         i++;       } else {         if (k != 0)           k = p[pat][k - 1];         else {           p[pat][i] = 0;           i++;         }       }     }   }   void KMPSearch(int txt, int pat) {     int i, k;     genPrefix(pat);     i = k = 0;     while (i < N) {       if (s[txt][i] == s[pat][k]) {         i++;         k++;         a[txt][i - k] = i - 1;       }       if (k == M) {         k = p[pat][k - 1];       } else if (i < N && s[txt][i] != s[pat][k]) {         if (k != 0) {           if (s[txt][i - 1] == s[pat][k])             a[txt][i - k] = max(i - 1, a[txt][k - 1]);           k = p[pat][k - 1];           if (k > 0 && s[txt][i - 1] == s[pat][k])             a[txt][i - k] = max(i - 1, a[txt][k - 1]);         } else           i++;       }     }   }   int bs(int low, int high, int v) {     int mid, x = -1;     while (low <= high) {       mid = (low + high) >> 1;       if (b[mid] >= v) {         x = mid;         high = mid - 1;       } else         low = mid + 1;     }     return x;   }   pair<int, int> solve() {     s[2] = s[0];     reverse(s[2].begin(), s[2].end());     memset(a, -1, sizeof(a));     KMPSearch(1, 2);     KMPSearch(0, 1);     b[0] = a[1][0];     int i, j = N, len, k, x;     int ansx = -1, ansy = -1;     for (i = 1; i <= N - 1; i++) b[i] = max(b[i - 1], a[1][i]);     for (i = 0; i <= N - 2; i++) {       j--;       if (s[0][i] != s[1][j]) break;       if (b[0] >= j - 1) {         ansx = i;         ansy = i + 1;       }       if (a[0][i + 1] <= 0 || i + 1 == N - 1) continue;       len = min(N - 2, a[0][i + 1]) - i;       k = bs(0, len, j - 1);       if (k >= 0 && ansx < i) {         ansx = i;         ansy = i + 1 + k;       }     }     return make_pair(ansx, ansy);   }   int main() {     std::ios_base::sync_with_stdio(0);     int cases, caseno = 0, n, i, j, k, cnt, m;     getline(cin, s[0]);     getline(cin, s[1]);     N = s[0].size();     M = s[1].size();     if (N != M) {       cout <<  -1 -1  <<   n ;       return 0;     }     pair<int, int> ans = solve();     cout << ans.first <<     << ans.second <<   n ;     return 0;   }   