#include <bits/stdc++.h>
using namespace std;
struct node {
  int l, r, p;
};
class compare {
 public:
  bool operator()(node f, node s) {
    if (f.l == s.l)
      return f.r < s.r;
    else
      return f.l < s.l;
  }
};
node ar[100010];
int sfx[20][100010], ole[100010], n;
int str[100010];
void up() {
  int x = 1, m;
  for (int i = 0; i <= n - 1; i++) sfx[0][i] = str[i];
  for (int j = 1; j <= 19; j++) {
    for (int i = 0; i <= n - 1; i++) {
      ar[i].l = sfx[j - 1][i];
      ar[i].r = -1;
      if (i + x < n) ar[i].r = sfx[j - 1][i + x];
      ar[i].p = i;
    }
    sort(ar, ar + n, compare());
    m = 0;
    for (int i = 0; i <= n - 1; i++) {
      if (i > 0) {
        if (!(ar[i].l == ar[i - 1].l && ar[i].r == ar[i - 1].r)) m++;
      }
      sfx[j][ar[i].p] = m;
    }
    x *= 2;
  }
  for (int j = 0; j <= n - 1; j++) {
    ole[ar[j].p] = j;
  }
}
int lcp(int f, int s, int t) {
  int x = 1 << t;
  if (t == -1)
    return 0;
  else if (max(f + x, s + x) <= n && sfx[t][f] == sfx[t][s])
    return (1 << t) + lcp(f + (1 << t), s + (1 << t), t);
  else
    return lcp(f, s, t - 1);
}
int cnt[100010];
set<pair<int, int> > sota;
int main() {
  ios::sync_with_stdio(false);
  int prin = 0;
  cin >> n;
  for (int i = 0; i <= n - 1; i++) cin >> str[i];
  up();
  int x = 1;
  for (int i = 0; i <= n - 1; i++) {
    int p = ole[i];
    for (int j = max(0, p - 10); j <= min(n - 1, p + 10); j++) {
      int lo = ar[j].p;
      if (lo > i && i + lcp(i, lo, 19) >= lo) {
        sota.insert(make_pair(lo - i, lo));
      }
    }
  }
  while (!sota.empty()) {
    pair<int, int> use = *(sota.begin());
    if ((use.second - use.first) + 1 > prin) {
      prin = use.second;
    }
    sota.erase(sota.begin());
  }
  cout << n - prin << endl;
  for (int i = prin; i <= n - 1; i++) cout << str[i] << ' ';
  return 0;
}
