You are given an array a with n distinct integers. Construct an array b by permuting a such that for every non-empty subset of indices S = {x1, x2, ..., xk} (1 ≤ xi ≤ n, 0 < k < n) the sums of elements on that positions in a and b are different, i. e.

The first line contains one integer n (1 ≤ n ≤ 22) — the size of the array.
The second line contains n space-separated distinct integers a1, a2, ..., an (0 ≤ ai ≤ 109) — the elements of the array.
If there is no such array b, print -1.
Otherwise in the only line print n space-separated integers b1, b2, ..., bn. Note that b must be a permutation of a.
If there are multiple answers, print any of them.
题意理解:给你一个a数组,让你构造一个b数组,使得b数组的任意连续k项加起来,都和a数组不一样。
解题思路: 我们让给a数组排个序,使b数组的元素对应位,为第一个比a对应位小的元素,如果是最小值,那么就用最大值替换,这样就能保证完全的不同。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;;
int a[50],p[50],b[50];
bool cmp(int x,int y)
{
return a[x]<a[y];
}
int main()
{
int n;
scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%d",&a[i]);
p[i]=i;
}
sort(p,p+n,cmp);
for (int i=0;i<n-1;i++)
{
b[p[i+1]]=a[p[i]];
}
b[p[0]]=a[p[n-1]];
for (int i=0;i<n;i++)
{
printf("%d ",b[i]);
}
return 0;
}