1. 程式人生 > >CF#446 Gluttony(思維題)

CF#446 Gluttony(思維題)

Gluttony time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output

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 indicesS = {x1, x2, ..., xk} (1 ≤ xi ≤ n0 < k

 < n) the sums of elements on that positions in a and b are different, i. e.

Input

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.

Output

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.

Examples input
2
1 2
output
2 1 
input
4
1000 100 10 1
output
100 1 1000 10
Note

An array x is a permutation of y

, if we can shuffle elements of y such that it will coincide with x.

Note that the empty subset and the subset containing all indices are not counted.

題意是a陣列,b陣列小於等於k的任意子集都不能相等,並不僅僅是前k項和,當時做這個題都理解錯了題意.

思路:因為陣列每一項都不相等,所以我們可以把第i位放置比a[i]大的第一個數,如果a[i]最大就放最小的那個.

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<cstring>
#include<string>
#include<vector>
#include<cmath> 
#include<map>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
const int ff = 0x3f3f3f3f;

int n,t;
int sq[52];
pair<int,int> a[52];

int main()
{
	cin>>n;
	for(int i = 0;i< n;i++)
	{
		cin>>a[i].first;
		a[i].second = i;	
	}
	sort(a,a+n);
	
	for(int i = 0;i< n;i++)
		sq[a[i].second] = i;
	for(int i = 0;i< n;i++)
		cout<<a[(sq[i]+1)%n].first<<' ';
	return 0;
}