func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   void inc(T& a, const T& b) {     if (a < b) a = b;   }   template <class T>   void dec(T& a, const T& b) {     if (a > b) a = b;   }   const int N = 100010;   int n;   int a[N];   struct node {     int lf, len;     bool operator<(const node& rhs) const {       if (len != rhs.len) return len < rhs.len;       return lf < rhs.lf;     }   } c[N * 10];   int cn;   map<int, vector<int> > g;   int main() {     scanf( %d , &n);     for (int i = 0; i < n; ++i) {       scanf( %d , a + i);       if (g.find(a[i]) == g.end()) g[a[i]] = vector<int>();       g[a[i]].push_back(i);     }     for (map<int, vector<int> >::iterator it = (g).begin(); it != (g).end();          ++it) {       vector<int>& t = it->second;       int sz = t.size();       for (int i = 0; i < sz; i++) {         for (int j = i + 1; j < sz; j++) {           if (t[j] - t[i] + t[j] > n) break;           c[cn].lf = t[i];           c[cn].len = t[j] - t[i];           cn++;         }       }     }     sort(c, c + cn);     int p = 0;     for (int i = 0; i < cn; i++) {       int& lf = c[i].lf;       int rt = lf + c[i].len;       if (lf < p) continue;       bool flag = true;       for (int j = 1; j < c[i].len; j++) {         if (a[lf + j] != a[rt + j]) {           flag = false;           break;         }       }       if (flag) {         p = rt;       }     }     printf( %d n , n - p);     for (int i = p; i < n; ++i) {       printf( %d , a[i]);       putchar(i + 1 < n ? 32 : 10);     }     return 0;   }   