#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define mp make_pair
#define fi first
#define se second
#define eb emplace_back
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 233;
int a[maxn],ch[maxn];
set<int> vis,buf;
int cnt[maxn],ans[maxn];int n;
int find(int x){
	auto it = vis.upper_bound(x);
	if(it==vis.end())return -1;
	return *it; 
}
void dfs(int cur){
	if(cur==n+1){
		for(int i=1;i<=n;i++)
			printf("%d ",ans[i]);
		puts("");
		exit(0);
	}
//	if(buf.size()<=2){
//		for(int x:buf){
//			if(vis.count(x)&&cnt[x]==n-cur){
//				if(x==a[ans[cur-1]])return ;
//				ans[cur] = x;
//				vis.erase(x);
//				cnt[a[x]]--;
//				if(cnt[a[x]]==0)buf.erase(a[x]);
//				dfs(cur+1);
//				return ; 
//			}
//		}
//	}
	for(int x=find(0);x!=-1;x=find(x)){
		if(x==a[ans[cur-1]])continue;
		if(cnt[a[x]]==n-cur&&vis.count(a[x]))continue;
		vis.erase(x);
		ans[cur] = x;
		cnt[a[x]]--;
		if(cnt[a[x]]==0)buf.erase(a[x]);
		dfs(cur+1);
		cnt[a[x]]++;
		buf.insert(a[x]);
		vis.insert(x);
	} 
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		vis.insert(i);
		buf.insert(a[i]);
		cnt[a[i]]++;
	}
	dfs(1);
	puts("-1");
}