Problem: Asterix, Obelix and their temporary buddies Suffix and Prefix has finally found the Harmony temple. However, its doors were firmly locked and even Obelix had no luck opening them.

A little later they found a string s, carved on a rock below the temple's gates. Asterix supposed that that's the password that opens the temple and read the string aloud. However, nothing happened. Then Asterix supposed that a password is some substring t of the string s.

Prefix supposed that the substring t is the beginning of the string s; Suffix supposed that the substring t should be the end of the string s; and Obelix supposed that t should be located somewhere inside the string s, that is, t is neither its beginning, nor its end.

Asterix chose the substring t so as to please all his companions. Besides, from all acceptable variants Asterix chose the longest one (as Asterix loves long strings). When Asterix read the substring t aloud, the temple doors opened. 

You know the string s. Find the substring t or determine that such substring does not exist and all that's been written above is just a nice legend.

Input

You are given the string s whose length can vary from 1 to 106 (inclusive), consisting of small Latin letters.

Output

Print the string t. If a suitable t string does not exist, then print "Just a legend" without the quotes.

Examples

Input

fixprefixsuffix


Output

fix

Input

abcdabc


Output

Just a legend

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
vector<int> T;
string Borde(string K) {
  vector<int> T(K.size() + 1, -1);
  for (int i = 1; i <= K.size(); i++) {
    int pos = T[i - 1];
    while (pos != -1 && K[pos] != K[i - 1]) pos = T[pos];
    T[i] = pos + 1;
  }
  return K.substr(0, T[T.size() - 1]);
}
int KMP(string S, string K) {
  vector<int> T(K.size() + 1, -1);
  for (int i = 1; i <= K.size(); i++) {
    int pos = T[i - 1];
    while (pos != -1 && K[pos] != K[i - 1]) pos = T[pos];
    T[i] = pos + 1;
  }
  vector<int> matches;
  int sp = 0;
  int kp = 0;
  while (sp < S.size()) {
    while (kp != -1 && (kp == K.size() || K[kp] != S[sp])) kp = T[kp];
    kp++;
    sp++;
    if (kp == K.size()) matches.push_back(sp - K.size());
  }
  return matches.size();
}
int main() {
  string cad, aux;
  while (cin >> cad) {
    aux = Borde(cad);
    if (!aux.size()) {
      cout << "Just a legend\n";
      continue;
    }
    if (KMP(cad, aux) >= 3)
      cout << aux << "\n";
    else {
      aux = Borde(aux);
      if (!aux.size()) {
        cout << "Just a legend\n";
        continue;
      }
      if (KMP(cad, aux) >= 3)
        cout << aux << "\n";
      else {
        cout << "Just a legend\n";
        continue;
      }
    }
  }
  return 0;
}