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 JAVA):

Solution:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.TreeSet;


public class B {
    
    private static int[] prfunc (char[] s) {
        int n = s.length;
        int[] ans = new int[n];
        for (int i=1; i<n; i++) {
            int j = ans[i-1];
            while (j > 0 && s[i] != s[j])
                j = ans[j-1];
            if (s[i] == s[j])  j++;
            ans[i] = j;
        }
        return ans;
    }

    
    public static void main(String[] args)throws Exception {
        String s = inB.readLine();
        char[] c = s.toCharArray();
        
        int n = s.length();
        int[] pf = prfunc(c);
        
        /*
        for(int i = 0; i<n; i++) {
            while(pf[i]*2 > i+1) {
                pf[i] = pf[i]*2 - (i+1);
            }
        }/**/
        
        /*
        for(int i = 0; i<pf.length; i++) {
            out.print(pf[i] + " ");
        }
        out.println();
        out.flush();/**/
        
        TreeSet<Integer> ts = new TreeSet<Integer>();
        
        for(int i = 1; i<n-1; i++) {
            if(pf[i]!=0)ts.add(pf[i]);
        }
        
        if(pf[n-1] == 0) {
            exit("Just a legend");
        }
        
        /*
        Integer ii = ts.floor(pf[n-1]);
        if(ii == null) {
            exit("Just a legend");
        }
        println(s.substring(0, ii));/**/
        
        int cur = n-1;
        for(;;) {
            if(pf[cur] == 0)break;
            if(ts.contains(pf[cur])) {
                exit(s.substring(0, pf[cur]));
            }
            cur = pf[cur]-1;
        }
        exit("Just a legend");
    }
    
    /////////////////////////////////////////////////////////////////
    // IO
    /////////////////////////////////////////////////////////////////
    private static StreamTokenizer in;
    private static PrintWriter out;
    private static BufferedReader inB;
    
    private static boolean FILE=false;
    
    private static int nextInt() throws Exception{
        in.nextToken();
        return (int)in.nval;
    }
    
    private static String nextString() throws Exception{
        in.nextToken();
        return in.sval;
    }
    
    static{
        try {
            out = new PrintWriter(FILE ? (new FileOutputStream("output.txt")) : System.out);
            inB = new BufferedReader(new InputStreamReader(FILE ? new FileInputStream("input.txt") : System.in));
        } catch(Exception e) {e.printStackTrace();}
        in = new StreamTokenizer(inB);
    }
    /////////////////////////////////////////////////////////////////
    
    /////////////////////////////////////////////////////////////////
    // pre - written
    /////////////////////////////////////////////////////////////////
    private static void println(Object o) throws Exception {
        out.println(o);
        out.flush();
    }
    private static void exit(Object o) throws Exception {
        println(o);
        exit();
    }
    private static void exit() {
        System.exit(0);
    }
    private static final int  INF = Integer.MAX_VALUE;
    private static final int MINF = Integer.MIN_VALUE;
    //////////////////////////////////////////////////////////////////
}