#include <bits/stdc++.h>
using namespace std;
int s[120000], p[120000], c[18][120000], pn[120000], cnt[120000];
int classes;
int n;
void build_tree() {
  for (int i = 0; i < n; ++i) ++cnt[s[i]];
  for (int i = 1; i < 120000; ++i) cnt[i] += cnt[i - 1];
  for (int i = 0; i < n; ++i) p[--cnt[s[i]]] = i;
  classes = 1;
  c[0][p[0]] = 0;
  for (int i = 1; i < n; ++i) {
    if (s[p[i]] != s[p[i - 1]]) ++classes;
    c[0][p[i]] = classes - 1;
  }
  for (int deg = 0; (1 << deg) < n; ++deg) {
    for (int i = 0; i < n; ++i) {
      p[i] -= 1 << deg;
      if (p[i] < 0) p[i] += n;
    }
    memset(cnt, 0, sizeof(cnt));
    for (int i = 0; i < n; ++i) ++cnt[c[deg][p[i]]];
    for (int i = 1; i < 120000; ++i) cnt[i] += cnt[i - 1];
    for (int i = n - 1; i >= 0; --i) pn[--cnt[c[deg][p[i]]]] = p[i];
    memcpy(p, pn, sizeof(p));
    classes = 1;
    c[deg + 1][p[0]] = 0;
    for (int i = 1; i < n; ++i) {
      int ind1 = p[i - 1] + (1 << deg);
      if (ind1 >= n) ind1 -= n;
      int ind2 = p[i] + (1 << deg);
      if (ind2 >= n) ind2 -= n;
      if (c[deg][p[i - 1]] != c[deg][p[i]] || c[deg][ind1] != c[deg][ind2])
        ++classes;
      c[deg + 1][p[i]] = classes - 1;
    }
  }
}
map<int, int> Map;
int C;
int r[120000];
vector<int> V[120000];
bool f(int pos1, int pos2) {
  int p1 = pos1, p2 = pos2;
  int deg = 0;
  while ((1 << (deg + 1)) <= n + 1) ++deg;
  while (deg >= 0) {
    if (c[deg][p1] == c[deg][p2]) p1 += (1 << deg), p2 += (1 << deg);
    --deg;
  }
  return p1 >= pos2;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &s[i]);
    Map.insert(make_pair(s[i], -1));
  }
  for (map<int, int>::iterator it = Map.begin(); it != Map.end(); ++it) {
    it->second = C;
    r[C] = it->first;
    ++C;
  }
  for (int i = 0; i < n; ++i) {
    s[i] = Map[s[i]];
    V[s[i]].push_back(i);
  }
  s[n] = C;
  ++n;
  build_tree();
  --n;
  vector<int> R;
  for (int i = 0; i < n;) {
    bool found = false;
    for (int j = 0; j < (int)V[s[i]].size(); ++j)
      if (V[s[i]][j] > i && f(i, V[s[i]][j])) {
        i = V[s[i]][j];
        found = true;
        R.clear();
        break;
      }
    if (!found) {
      R.push_back(r[s[i]]);
      ++i;
    }
  }
  printf("%d\n", (int)R.size());
  for (int i = 0; i < (int)R.size(); ++i)
    printf("%d%c", R[i], i == (int)R.size() - 1 ? '\n' : ' ');
  return 0;
}
