func_code_string: #include <bits/stdc++.h>   using namespace std;   int base1 = 115019, mod1 = 1e9 + 13;   vector<int> pos[100005];   int n, t[100005], a[100005];   long long p1[100005], sum1[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 sy1 =         ((sum1[y + y - x - 1] - sum1[y - 1] * p1[y - x]) % mod1 + mod1) % mod1;     return sx1 == sy1;   }   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] = 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;       sum1[i] = (sum1[i - 1] * base1 + a[i]) % mod1;     }     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]]);     return 0;   }   