func_code_string: #include <bits/stdc++.h>   using namespace std;   const char nl =   n ;   const int mod = 1000000007;   const double pi = 4 * atan(1);   const int inf = 2000000000;   const long long linf = (long long)1e18;   const int pr = 37;   const int maxn = 1000001;   const int maxn_big = 1000001;   string s;   vector<int> v;   unsigned long long h[maxn], p[maxn];   unsigned long long get_hash(int l, int r) {     int len = (r - l) + 1;     if (!l) return h[r];     return h[r] - h[l - 1] * p[len];   }   bool check(int pf) {     unsigned long long pref_hash = get_hash(0, pf);     bool has_ans = 0;     for (int i = 1; i < ((int)(s.size())) - 1; ++i) {       int r = i + pf;       if (r >= ((int)(s.size())) - 1) break;       if (get_hash(i, r) == pref_hash) {         has_ans = 1;         break;       }     }     return has_ans;   }   int main() {     ios_base ::sync_with_stdio(0);     cin.tie(0);     srand(time(NULL));     cin >> s;     h[0] = s[0];     p[0] = 1;     for (int i = 1; i < ((int)(s.size())); ++i) {       h[i] = h[i - 1] * pr + s[i];       p[i] = p[i - 1] * pr;     }     for (int i = 0; i < ((int)(s.size())); ++i) {       int l = ((int)(s.size())) - 1 - i;       if (get_hash(0, i) == get_hash(l, ((int)(s.size())) - 1)) v.push_back(i);     }     if (!((int)(v.size()))) {       cout <<  Just a legend ;       return 0;     }     int l = -1, r = ((int)(v.size()));     bool has = 0;     while (r - l > 1) {       int mid = (r + l) / 2;       if (check(v[mid])) {         l = mid;         has = 1;       } else {         r = mid;       }     }     if (!has) {       cout <<  Just a legend ;       return 0;     }     string res =   ;     for (int i = 0; i <= v[l]; ++i) res += s[i];     cout << res;     return 0;   }   