func_code_string: #include <bits/stdc++.h>   using namespace std;   int ns, k, n, m;   char s[1000010], t[1000010], p[1000010];   vector<int> vet;   int fail[1000010];   void buildFail(char *p) {     int j = fail[0] = -1;     for (int i = 1; i <= m; i++) {       while (j >= 0 && p[j] != p[i - 1]) j = fail[j];       fail[i] = ++j;     }   }   int kmp(char *p, char *t) {     buildFail(p);     for (int i = 0, k = 0; i < n; i++) {       while (k >= 0 && p[k] != t[i]) k = fail[k];       if (++k >= m) {         return 1;         k = fail[k];       }     }     return 0;   }   int test(int k) {     int i, j;     m = 0;     for (i = 0, j = ns - k; i < k; i++, j++) {       if (s[i] != s[j]) break;       p[m++] = s[i];     }     if (i < k) return 0;     p[m] =   0 ;     return kmp(p, t);   }   int main() {     int lo, hi, mid;     scanf(  %s , s);     ns = strlen(s);     vet.clear();     m = ns;     buildFail(s);     k = ns;     while (fail[k] > 0) {       vet.push_back(fail[k]);       k = fail[k];     }     sort(vet.begin(), vet.end());     for (int i = 1; i < ns - 1; i++) t[i - 1] = s[i];     t[n - 2] =   0 ;     n = ns - 2;     lo = 0;     hi = vet.size() - 1;     k = 0;     while (lo <= hi) {       mid = (lo + hi) / 2;       if (test(vet[mid])) {         k = vet[mid];         lo = mid + 1;       } else         hi = mid - 1;     }     if (!k)       printf( Just a legend n );     else {       for (int i = 0; i < k; i++) printf( %c , s[i]);       printf(  n );     }     return 0;   }   