#include <bits/stdc++.h>
using namespace std;
const int inf(1010101010);
const long long P(29);
long long pp[100005];
long long ch[100005];
inline bool eq(int start1, int start2, int le) {
  long long h1(ch[start1 + le] - ch[start1]);
  long long h2(ch[start2 + le] - ch[start2]);
  return h1 * pp[start2] == h2 * pp[start1];
}
int n, a[100005];
map<int, vector<int> > startpos;
int shortest[100005];
int cmin[100005];
int main() {
  cin >> n;
  for (int i(0); i < (n); i++) cin >> a[i], startpos[a[i]].push_back(i);
  ch[0] = 0;
  pp[0] = 1;
  int i(1);
  for (; i <= (n); i++) {
    ch[i] = ch[i - 1] + pp[i - 1] * a[i - 1];
    pp[i] = pp[i - 1] * P;
  }
  for (int i(0); i < (n); i++) {
    shortest[i] = inf;
    int startnum(a[i]);
    vector<int> const& v(startpos[startnum]);
    for (__typeof((v).end()) it((v).begin()); it != ((v).end()); ++it) {
      int j(*it);
      if (j <= i) continue;
      int le(j - i);
      if (j + le <= n && eq(i, j, le)) shortest[i] = min(shortest[i], le);
    }
  }
  cmin[n] = inf;
  for (int i(n - 1); i >= (0); i--) {
    cmin[i] = min(cmin[i + 1], shortest[i]);
  }
  int pt(0);
  for (; pt < (n);) {
    int le(cmin[pt]);
    if (le == inf) break;
    int loc(find(shortest + pt, shortest + n, le) - shortest);
    pt = loc + le;
  }
  cout << (n - pt) << endl;
  for (int i(pt); i < (n); i++) cout << a[i] << " ";
  cout << endl;
}
