#include <bits/stdc++.h>
using namespace std;
int n;
int ar[100000];
bool ok[600000];
map<int, vector<int> > pos;
struct tt {
  int a, b, len;
  tt() {}
  tt(int aa, int bb) {
    a = aa;
    b = bb;
  }
};
bool cmp(const tt& a, const tt& b) {
  if (a.b - a.a != b.b - b.a) return a.b - a.a < b.b - b.a;
  return a.a > b.a;
}
bool cmp2(const tt& a, const tt& b) {
  if (a.b - a.a != b.b - b.a) return a.b - a.a < b.b - b.a;
  return a.a < b.a;
}
vector<tt> pairs;
int main() {
  scanf("%d", &n);
  int i;
  for (i = 0; i < n; i++) {
    scanf("%d", &ar[i]);
    pos[ar[i]].push_back(i);
  }
  pairs.clear();
  int j;
  map<int, vector<int> >::iterator it;
  for (it = pos.begin(); it != pos.end(); it++) {
    vector<int>& v = it->second;
    for (i = 0; i < v.size(); i++)
      for (j = i + 1; j < v.size(); j++) pairs.push_back(tt(v[i], v[j]));
  }
  sort(pairs.begin(), pairs.end(), cmp);
  for (i = 0; i < pairs.size(); i++) {
    int a = pairs[i].a;
    int b = pairs[i].b;
    if (b == a + 1)
      pairs[i].len = 1;
    else {
      tt tmp(a + 1, b + 1);
      if (!binary_search(pairs.begin(), pairs.begin() + i, tmp, cmp))
        pairs[i].len = 1;
      else {
        int pos = lower_bound(pairs.begin(), pairs.begin() + i, tmp, cmp) -
                  pairs.begin();
        pairs[i].len = min(pairs[pos].len + 1, b - a);
      }
    }
  }
  sort(pairs.begin(), pairs.end(), cmp2);
  int start = 0;
  for (i = 0; i < pairs.size(); i++) {
    int a = pairs[i].a;
    int b = pairs[i].b;
    if (a < start) continue;
    if (pairs[i].len < b - a) continue;
    start = b;
  }
  printf("%d\n", n - start);
  for (i = start; i < n; i++) {
    if (i != start) printf(" ");
    printf("%d", ar[i]);
  }
  printf("\n");
}
