#include <bits/stdc++.h>
using namespace std;
int base1 = 115019, base2 = 115021;
int mod1 = 1e9 + 13, mod2 = 1e9 + 7;
vector<int> pos[100005];
int n, t[100005], a[100005];
long long p1[100005], p2[100005], sum1[100005], sum2[100005];
struct node {
  int st, len;
  bool operator<(const node &A) const {
    if (len == A.len) return st < A.st;
    return len < A.len;
  }
};
vector<node> S;
bool check(int x, int y) {
  if (y + (y - x) - 1 > n) return false;
  long long sx1 =
      ((sum1[y - 1] - sum1[x - 1] * p1[y - x]) % mod1 + mod1) % mod1;
  long long sx2 =
      ((sum2[y - 1] - sum2[x - 1] * p2[y - x]) % mod2 + mod2) % mod2;
  long long sy1 =
      ((sum1[y + y - x - 1] - sum1[y - 1] * p1[y - x]) % mod1 + mod1) % mod1;
  long long sy2 =
      ((sum2[y + y - x - 1] - sum2[y - 1] * p2[y - x]) % mod2 + mod2) % mod2;
  return sx1 == sy1 && sx2 == sy2;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]), t[i] = a[i];
  sort(t + 1, t + n + 1);
  int m = unique(t + 1, t + n + 1) - t - 1;
  p1[0] = p2[0] = 1;
  for (int i = 1; i <= n; ++i) {
    a[i] = lower_bound(t + 1, t + m + 1, a[i]) - t;
    pos[a[i]].push_back(i);
    p1[i] = p1[i - 1] * base1 % mod1;
    p2[i] = p2[i - 1] * base2 % mod2;
    sum1[i] = (sum1[i - 1] * base1 + a[i]) % mod1;
    sum2[i] = (sum2[i - 1] * base2 + a[i]) % mod2;
  }
  for (int i = 1; i <= m; ++i)
    for (int j = 0; j < pos[i].size(); ++j)
      for (int k = j + 1; k < pos[i].size(); ++k) {
        int x = pos[i][j], y = pos[i][k];
        if (check(x, y)) S.push_back((node){x, y - x});
      }
  sort(S.begin(), S.end());
  int now = 1;
  for (int i = 0; i < S.size(); ++i) {
    node p = S[i];
    if (p.st < now)
      continue;
    else
      now = p.st + p.len;
  }
  printf("%d\n", n - now + 1);
  for (int i = now; i <= n; ++i) printf("%d ", t[a[i]]);
}
