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.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.InputMismatchException;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author xwchen
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        TaskB solver = new TaskB();
        solver.solve(1, in, out);
        out.close();
    }

    static class TaskB {
        public void solve(int testNumber, InputReader in, PrintWriter out) {
            char[] s = in.next().toCharArray();
            int[] p = KMP.getP(s);
            String no = "Just a legend";
            int n = s.length;
            if (p[n - 1] == 0) {
                out.println(no);
            } else {
                int k = p[n - 1];
                for (int i = 1; i < n - 1; ++i) {
                    if (p[i - 1] == k) {
                        out.println(new String(s).substring(0, k));
                        return;
                    }
                }
                if (p[k - 1] == 0) {
                    out.println(no);
                } else {
                    k = p[k - 1];
                    out.println(new String(s).substring(0, k));
                }
            }
        }

    }

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

    }

    static class InputReader {
        final private int BUFFER_SIZE = 1 << 10;
        final private int LINE_SIZE = 1 << 20;
        private DataInputStream in;
        private byte[] buffer;
        private int bufferPointer;
        private int bytesRead;

        public InputReader(InputStream inputStream) {
            this.in = new DataInputStream(inputStream);
            buffer = new byte[BUFFER_SIZE];
            bufferPointer = bytesRead = 0;
        }

        public String next() {
            byte[] buf = new byte[LINE_SIZE]; // line length
            int cnt = 0, c;
            c = read();
            while (c == ' ' || c == '\n' || c == '\r')
                c = read();
            do {
                if (c == ' ' || c == '\n' || c == '\r')
                    break;
                buf[cnt++] = (byte) c;
            } while ((c = read()) != -1);
            return new String(buf, 0, cnt);
        }

        private void fillBuffer() {
            try {
                bytesRead = in.read(buffer, bufferPointer = 0, BUFFER_SIZE);
                if (bytesRead == -1)
                    buffer[0] = -1;
            } catch (IOException e) {
                throw new InputMismatchException();
            }
        }

        private byte read() {
            if (bufferPointer == bytesRead)
                fillBuffer();
            return buffer[bufferPointer++];
        }

    }
}