http://codeforces.com/problemset/problem/19/C
/**
CF19C STL
题目大意:给定一个数组有重复,让求出删除重复后的数组。所谓重复即为;123123,而123124不算重复。必须是2n长度1-n和n+1~n*2完全对应相等
现在寻找最右边的一个重复的,将其1~n部分和其前面所有的数全部删掉。
解题思路:利用list存储所有相同数字依次出现的位置,从前往后匹配,并一边删除,比vector时间复杂度低
*/
#include <stdio.h>
#include <iostream>
#include <map>
#include <list>
using namespace std;
map<int,list<int> > t;
list<int>::iterator it;
int a[200000];
int main()
{
int n;
while(~scanf("%d",&n))
{
for (int i=0; i<n; i++)
{
scanf("%d",&a[i]);
t[a[i]].push_back(i);
}
a[n]=-1;
int ans;
for (int i=0; i<n; i++)
{
list<int> e=t[a[i]];
t[a[i]].pop_front();
for (it=e.begin(); it!=e.end(); it++)
{
int x=i+1;
int y=(*it)+1;
while (x<(*it)&&a[x]==a[y])
{
x++;
y++;
}
if (x==(*it))
{
i=(*it)-1;
ans=(*it);
}
}
}
printf("%d\n",n-ans);
for (int i=ans; i<n; i++)
printf(i==n-1?"%d\n":"%d ",a[i]);
}
return 0;
}