Niwango has N cards, numbered 1,2,\ldots,N. He will now arrange these cards in a row.

Niwango wants to know if there is a way to arrange the cards while satisfying all the N conditions below. To help him, determine whether such a way exists. If the answer is yes, also find the lexicographically smallest such arrangement.

* To the immediate right of Card 1 (if any) is NOT Card a_1.
* To the immediate right of Card 2 (if any) is NOT Card a_2.
* \vdots
* To the immediate right of Card N (if any) is NOT Card a_N.

Constraints

* 2 \leq N \leq 10^{5}
* 1 \leq a_i \leq N
* a_i \neq i

Input

Input is given from Standard Input in the following format:


N
a_1 a_2 \ldots a_N


Output

If no arrangements satisfy the conditions, print `-1`. If such arrangements exist, print the lexicographically smallest such arrangement, in the following format:


b_1 b_2 \ldots b_N


Here, b_i represents the i-th card from the left.

Examples

Input

4
2 3 4 1


Output

1 3 2 4


Input

2
2 1


Output

-1


Input

13
2 3 4 5 6 7 8 9 10 11 12 13 12


Output

1 3 2 4 6 5 7 9 8 10 12 11 13
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 100010
inline int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+c-'0';
		c=getchar();
	}
	return x*f;
}
int n,a[N],cnt[N],p[N],vis[N],las;
int main(){
	//freopen("special_01","r",stdin);
	//freopen("qwq","w",stdout);
	n=read();
	for(int i=1;i<=n;++i){
		p[i]=i;
		a[i]=read();
		//cerr<<" "<<i<<" "<<a[i]<<endl;
		++cnt[a[i]];
	}
	if(n==2)return !printf("-1\n");
	//cerr<<" "<<a[91]<<endl;
	for(int i=1;i<=n;++i){
		if(a[las]==p[i]){
			swap(p[i],p[i+1]);
		}
		int u=p[i];
		/*if(u==91){
			cerr<<" !! "<<p[i+1]<<" "<<a[u]<<" !! "<<endl;
		}*/
		if(vis[a[u]]){
			if(i==n-2&&a[p[i+1]]==p[i+2]&&a[p[i+2]]==p[i+1]){
				if(p[i+1]==a[las]){
					swap(p[i],p[i+2]);
					swap(p[i+1],p[i+2]);
				}
				else{
					swap(p[i],p[i+1]);
				}
			}
		}
		else if(cnt[a[u]]==n-i){
		//	cerr<<" !!!! "<<u<<" "<<a[u]<<" ???? "<<endl;
			for(int j=i+1;j<=n;++j){
				if(p[j]==a[u]){
					for(int k=j;k>i;--k){
						swap(p[k],p[k-1]);
					}
					break;
				}
			}
		}
		printf("%d ",p[i]);
		vis[p[i]]=1;
		--cnt[a[p[i]]];
		las=p[i];
		if(i>=n-20)sort(p+i+1,p+n+1);
	}
	return 0;
}

