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 <bits/stdc++.h>
using namespace std;

template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl





using ll = long long;

const ll mod = 1e9+7;
const int maxn = 1e5 + 5;



int n;
int a[maxn];
int ans[maxn];
int used[maxn];
int indeg[maxn];

void dfs(int idx, int lo) {
    if (idx == n) {
	for (int i=0; i<n; i++) {
	    cout<<ans[i]+1<<" ";
	}
	cout<<endl;
	exit(0);
    }

    // Prune: a[ans[idx-1]] can't go after anyone
    if (idx>0 && !used[a[ans[idx-1]]] && indeg[a[ans[idx-1]]] == n-idx-1) {
	return;
    }
    while (used[lo]) lo++;
    for (int x=lo; x<n; x++) {
	if (used[x]) continue;
	if (idx>0 && a[ans[idx-1]]==x) continue;
	int _lo = x==lo ? lo+1 : lo;
	used[x]=1;
	ans[idx]=x;
	indeg[a[x]]--;
	dfs(idx+1, _lo);
	indeg[a[x]]++;
	ans[idx]=0;
	used[x]=0;
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0);  cout.tie(0);

    cin>>n;
    for (int i=0; i<n; i++) {
	cin>>a[i];
	--a[i];
	indeg[a[i]]++;
    }

    dfs(0,0);
    out(-1);
    
    
    return 0;
}
