#include <bits/stdc++.h>
using namespace std;
template <class T>
void inc(T& a, const T& b) {
  if (a < b) a = b;
}
template <class T>
void dec(T& a, const T& b) {
  if (a > b) a = b;
}
const int N = 100010;
int n;
int a[N];
struct node {
  int lf, len;
  bool operator<(const node& rhs) const {
    if (len != rhs.len) return len < rhs.len;
    return lf < rhs.lf;
  }
} c[N * 10];
int cn;
map<int, vector<int> > g;
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", a + i);
    if (g.find(a[i]) == g.end()) g[a[i]] = vector<int>();
    g[a[i]].push_back(i);
  }
  for (map<int, vector<int> >::iterator it = (g).begin(); it != (g).end();
       ++it) {
    vector<int>& t = it->second;
    int sz = t.size();
    for (int i = 0; i < sz; i++) {
      for (int j = i + 1; j < sz; j++) {
        if (t[j] - t[i] + t[j] > n) break;
        c[cn].lf = t[i];
        c[cn].len = t[j] - t[i];
        cn++;
      }
    }
  }
  sort(c, c + cn);
  int p = 0;
  for (int i = 0; i < cn; i++) {
    int& lf = c[i].lf;
    int rt = lf + c[i].len;
    if (lf < p) continue;
    bool flag = true;
    for (int j = 1; j < c[i].len; j++) {
      if (a[lf + j] != a[rt + j]) {
        flag = false;
        break;
      }
    }
    if (flag) {
      p = rt;
    }
  }
  printf("%d\n", n - p);
  for (int i = p; i < n; ++i) {
    printf("%d", a[i]);
    putchar(i + 1 < n ? 32 : 10);
  }
  return 0;
}
