#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#define mp make_pair
#define PI pair<ll,ll>
#define poly vector<ll>
#define mem(a) memset((a),0,sizeof(a))
#define For(i,l,r) for(int i=(int)(l);i<=(int)(r);i++)
#define Rep(i,r,l) for(int i=(int)(r);i>=(int)(l);i--)
#define pb push_back
#define fi first
#define se second
#define SZ(x) ((int)(x.size()))
inline char gc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
#define gc getchar
inline ll read(){
	ll x = 0; char ch = gc(); bool positive = 1;
	for (; !isdigit(ch); ch = gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = gc())	x = x * 10 + ch - '0';
	return positive ? x : -x;
}
inline void write(ll a){
    if(a<0){
    	a=-a; putchar('-');
	}
    if(a>=10)write(a/10);
    putchar('0'+a%10);
}
inline void writeln(ll a){write(a); puts("");}
inline void wri(ll a){write(a); putchar(' ');}
ll rnd(){
	ull ans=0;
	For(i,0,4)ans=ans<<15^rand();
	return ans%((ull)1<<63);
}
const int N=100005,C=5,mod=1e9+7;
int n,a[N],ans[N];
set<int> res;
map<int,int> s;
int check(){
	if(s.size()==2){
		for(auto i:s)if(i.se==res.size()-1&&res.count(i.fi))return i.fi;
		return 0;
	}else{
		return 0;
	}
}
void GG(){
	puts("-1"); exit(0);
}
void dfs(int p,int lst,set<int> res){
	if(p>n){
		For(i,1,n)wri(ans[i]); exit(0); 
	}
	for(auto i:res)if(i!=lst){
		ans[p]=i; set<int> re=res; re.erase(i);
		dfs(p+1,a[i],re);
	}
}
int main(){
	#ifdef Brollan
		freopen("1.in","r",stdin);
	#endif
	n=read();
	For(i,1,n){
		a[i]=read(); res.insert(i); s[a[i]]++; 
	}
	if(n==2)GG();
	int lst=0; 
	For(i,1,n-C){
		int t=check();
		if(t){
			ans[i]=t; 
		}else{
			auto it=res.begin();
			if(*it==lst)it++;
			ans[i]=*it;
		}
		if(--s[a[ans[i]]]==0)s.erase(a[ans[i]]);
		res.erase(ans[i]);
		//cout<<ans[i]<<" "<<s[10]<<" "<<res.size()<<" "<<t<<endl;
		lst=a[ans[i]];
	}
	dfs(max(1,n-C+1),lst,res);
	GG();
}
