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.* ;
import java.util.*;

import static java.lang.Math.* ;
import static java.util.Arrays.* ;

public class B {
	
	public static void main(String[] args) throws IOException {
		
		new B().solveProblem();
		
		out.close();
	}

	static Scanner in = new Scanner(new InputStreamReader(System.in));
	//static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static PrintStream out = new PrintStream(new BufferedOutputStream(System.out));
	
	String s ;
	public void solveProblem() {		
		
		s = in.nextLine() ;
		T = s.toCharArray() ;

		
		if( s.length() > 2){
			P = s.substring(0, s.length()-2).toCharArray() ;
			n = m = s.length() ;
			m-=2 ;
		preprocess() ;
		kmp() ;
		}
		
		if( max == 0 ){
			out.println("Just a legend") ;
		}else{
			out.println(s.substring(0,max)) ;
		}
		
	}
	
	char[] T ;
	char[] P ;
	int[] b ;
	
	int n, m ;
	
	void preprocess(){
		
		b = new int[m+1] ;
		
		int i = 0 ;
		int j = -1 ;
		b[0] = -1 ;
		
		while( i < m ){
			while( j >= 0 && P[i] != P[j] )
				j = b[j] ;
			
			i++ ;
			j++ ;
			b[i] = j ;
		}
		
		
	}
	
	int max = 0 ;
	void kmp(){
		
		int i = 0 ;
		int j = 0 ;
		
		while( i < n ){
			
			while( j >= 0 && T[i] != P[j])
				j = b[j] ;
			i++ ;
			j++ ;
		//	System.out.println(i + " " +j);
			if( i == n ){
				String ss = s.substring(0,j) ;
				KMP k =new KMP(s.substring(1),ss) ;
				
				int op = k.kmp() ;
			//	System.out.println(j +" "+ op);
				if(  op != -1 && op != n-j-1){
					max = j;
					return ;
				}
				i = n - j + 1;
				j = 0 ;
			}
			
			if( j == m){
				//gev ;
				//System.out.println(i-j);
				j = b[j] ;
			}
		}
	
	}

	class KMP{
		
		public KMP(String tekst, String pattern){
			T = tekst.toCharArray() ;
			n = T.length ;
			P = pattern.toCharArray() ;
			m = P.length ;
			

			
			preprocess() ;
		}
		
		char[] T ;
		char[] P ;
		int[] b ;
		
		int n, m ;
		
		void preprocess(){
			
			b = new int[m+1] ;
			
			int i = 0 ;
			int j = -1 ;
			b[0] = -1 ;
			
			while( i < m ){
				while( j >= 0 && P[i] != P[j] )
					j = b[j] ;
				
				i++ ;
				j++ ;
				b[i] = j ;
			}
		}
		
		int kmp(){
			
			int i = 0 ;
			int j = 0 ;
			
			while( i < n && m != 0){
				
				while( j >= 0 && T[i] != P[j])
					j = b[j] ;
				i++ ;
				j++ ;
				
				if( j == m){
					//gev ;
					//System.out.println(i-j);
					return i-j ;
					//j = b[j] ;
				
				}
			}
			
			return -1 ;
		
		}
	}

       
}