#include <bits/stdc++.h>
using namespace std;
const int M1 = 1000000009, M2 = 1000000007, A = 1000000001;
int n, v[100000], h[2][100001], inv[2][100001], val[100000];
void build(int *h, const int &M) {
  long long p = 1;
  for (int i = n - 1; i >= 0; --i) {
    h[i] = (h[i + 1] + v[i] * p % M) % M;
    p = p * A % M;
  }
}
int get(int *h, int *inv, int l, int r, const int &M) {
  long long ret = (h[l] - h[r + 1]) % M + M;
  ret *= inv[r];
  return ret % M;
}
int Pow(int b, int p, const int &M) {
  if (!p) return 1;
  long long z = Pow(b, p / 2, M);
  if (p & 1) return z * z % M * b % M;
  return z * z % M;
}
int main() {
  scanf("%d", &n);
  long long p1 = 1, p2 = 1;
  for (int i = n - 1; i >= 0; --i) {
    inv[0][i] = Pow(p1, M1 - 2, M1);
    inv[1][i] = Pow(p2, M2 - 2, M2);
    p1 = p1 * A % M1;
    p2 = p2 * A % M2;
  }
  for (int i = 0; i < n; ++i) scanf("%d", v + i);
  build(h[0], M1);
  build(h[1], M2);
  map<int, int> next, last;
  set<pair<int, int> > q;
  for (int i = n - 1; i >= 0; --i) {
    if (last.find(v[i]) == last.end())
      next[i] = -1;
    else
      next[i] = last[v[i]];
    last[v[i]] = i;
    int cur = next[i];
    int it = 0;
    while (cur != -1 && it < 5) {
      if (get(h[0], inv[0], i, cur - 1, M1) ==
          get(h[0], inv[0], cur, cur + cur - i - 1, M1)) {
        if (get(h[1], inv[1], i, cur - 1, M2) ==
            get(h[1], inv[1], cur, cur + cur - i - 1, M2)) {
          val[i] = cur - i;
          break;
        }
      }
      ++it;
      cur = next[cur];
    }
    if (val[i]) q.insert(make_pair(val[i], i));
  }
  int start = 0;
  pair<int, int> cur;
  while (!q.empty()) {
    cur = *q.begin();
    q.erase(q.begin());
    if (cur.second < start) continue;
    start = cur.second + cur.first;
  }
  printf("%d\n", n - start);
  while (start < n) printf("%d ", v[start++]);
  return 0;
}
