#include <bits/stdc++.h>
using namespace std;
const int maxN = 1000000 + 100;
const long long SEED = 1331LL;
struct Hash {
  long long hash;
  int start;
  Hash() {}
  Hash(long long _hash, int _start) {
    hash = _hash;
    start = _start;
  }
  bool operator<(const Hash &b) const {
    return hash < b.hash || (hash == b.hash && start < b.start);
  }
};
char a[maxN];
int n;
long long v[maxN];
long long Hp[maxN], Hs[maxN];
int main() {
  scanf("%s", a);
  n = strlen(a);
  long long power = 1;
  Hp[0] = Hs[0] = 0;
  vector<int> vp;
  for (int i = 1; i <= n; i++) {
    Hp[i] = Hp[i - 1] * SEED + a[i - 1];
    Hs[i] = Hs[i - 1] + a[n - i] * power;
    power *= SEED;
    if (i < n - 1 && Hp[i] == Hs[i]) vp.push_back(i);
  }
  int best = 0, pos = 0;
  int left = 0, right = vp.size() - 1;
  while (left <= right) {
    int k = left + right >> 1;
    long long h = 0;
    long long power = 1;
    for (int i = 1; i < vp[k] + 1; i++) {
      h = h * SEED + a[i];
      if (i > 1) power *= SEED;
    }
    int size = 0;
    v[size++] = h;
    for (int j = vp[k] + 1; j < n - 1; j++) {
      h = (h - power * a[j - vp[k]]) * SEED + a[j];
      v[size++] = h;
    }
    sort(v, v + size);
    for (int i = 0; i < size; i++) {
      if (v[i] == Hp[vp[k]]) {
        best = vp[k];
        break;
      }
    }
    if (best == vp[k])
      left = k + 1;
    else
      right = k - 1;
  }
  if (best == 0)
    puts("Just a legend");
  else {
    for (int i = 0; i < best; i++) {
      printf("%c", a[i]);
    }
    printf("\n");
  }
  return 0;
}
