#include <bits/stdc++.h>
using namespace std;
const long long X = 1000000007;
long long getSubKey(vector<long long> &sKey, int i, int j) {
  long long res = sKey[j];
  if (i - 1 >= 0) {
    res -= sKey[i - 1];
  }
  return res;
}
int main() {
  int n;
  cin >> n;
  vector<int> a(n);
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
  }
  vector<int> next(n);
  map<int, int> last;
  for (int i = n - 1; i >= 0; --i) {
    int x = a[i];
    if (last.find(x) == last.end()) {
      next[i] = -1;
    } else {
      next[i] = last[x];
    }
    last[x] = i;
  }
  vector<long long> powX(n);
  powX[0] = 1;
  for (int i = 1; i < n; ++i) {
    powX[i] = powX[i - 1] * X;
  }
  vector<long long> sKey(n);
  sKey[0] = a[0];
  for (int i = 1; i < n; ++i) {
    sKey[i] = sKey[i - 1] + a[i] * powX[i];
  }
  vector<int> repLen(n);
  for (int i = 0; i < n; ++i) {
    repLen[i] = -1;
    for (int j = next[i]; j != -1; j = next[j]) {
      long long subKey1 = getSubKey(sKey, i, j - 1) * powX[j - i];
      if (j - i + j - 1 >= n) {
        continue;
      }
      long long subKey2 = getSubKey(sKey, j, j - i + j - 1);
      if (subKey1 == subKey2) {
        repLen[i] = j - i;
        break;
      }
    }
  }
  vector<int> minRepLen(n, n + n);
  for (int i = n - 1; i >= 0; --i) {
    if (repLen[i] != -1) {
      minRepLen[i] = min(minRepLen[i], repLen[i]);
    }
  }
  int start = 0;
  for (int i = 0; i < n; ++i) {
    if (repLen[i] == minRepLen[i]) {
      start = i + repLen[i];
      i = start - 1;
    }
  }
  cout << n - start << endl;
  for (int i = start; i < n; ++i) {
    cout << a[i] << (i + 1 < n ? " " : "\n");
  }
}
