http://codeforces.com/contest/892/problem/D
构造b数组 若a[i]不是最大值 则使b[i]等于比a[i]大的第一个数 若a[i]是最大值则b[i]等于a数组中最小元素
可以这样想 若某一真子集中不包maxx 对任意i有b[i]-a[i]>0 则两子集必不相等 若真子集包含maxx 则该下标子集对应的a子集与b子集的补集必然不相等 又因为ab全集相等 所以a子集与b子集也不相等
using namespace std;
int main()
{
map <int,int> mp;
int a[100],b[100];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b,b+n);
for(i=0;i<n;i++) mp[b[i]]=b[(i+1)%n];
for(i=0;i<n;i++) printf("%d ",mp[a[i]]);
printf("\n");
return 0;
}