func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf(1010101010);   const long long P(29);   long long pp[100005];   long long ch[100005];   inline bool eq(int start1, int start2, int le) {     long long h1(ch[start1 + le] - ch[start1]);     long long h2(ch[start2 + le] - ch[start2]);     return h1 * pp[start2] == h2 * pp[start1];   }   int n, a[100005];   map<int, vector<int> > startpos;   int shortest[100005];   int cmin[100005];   int main() {     cin >> n;     for (int i(0); i < (n); i++) cin >> a[i], startpos[a[i]].push_back(i);     ch[0] = 0;     pp[0] = 1;     int i(1);     for (; i <= (n); i++) {       ch[i] = ch[i - 1] + pp[i - 1] * a[i - 1];       pp[i] = pp[i - 1] * P;     }     for (int i(0); i < (n); i++) {       shortest[i] = inf;       int startnum(a[i]);       vector<int> const& v(startpos[startnum]);       for (__typeof((v).end()) it((v).begin()); it != ((v).end()); ++it) {         int j(*it);         if (j <= i) continue;         int le(j - i);         if (j + le <= n && eq(i, j, le)) shortest[i] = min(shortest[i], le);       }     }     cmin[n] = inf;     for (int i(n - 1); i >= (0); i--) {       cmin[i] = min(cmin[i + 1], shortest[i]);     }     int pt(0);     for (; pt < (n);) {       int le(cmin[pt]);       if (le == inf) break;       int loc(find(shortest + pt, shortest + n, le) - shortest);       pt = loc + le;     }     cout << (n - pt) << endl;     for (int i(pt); i < (n); i++) cout << a[i] <<    ;     cout << endl;   }   