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;
typedef vector<int> VI;
typedef pair <int,int> ii;
typedef long long LL;
#define pb push_back
const int INF = 2147483647;
const int N = 100005;

int tab[N], res[N], i, n, k, last, bat[3];
set<int> s;
set<int>::iterator it;
map<int, int> mapa;

bool ok() {
	for (int i=1;i<n;i++) if (res[i + 1] == tab[res[i]]) return false;
	return true;
}

int badMap() {
	if (mapa.size() != 2) return -1;
	bool r = 0;
	for (auto& w : mapa) if (w.second == 1) r = 1;
	if (!r) return -1;
	for (auto& w : mapa) if (w.second != 1) return w.first;
}

void go(int ind, int l) {
	//printf("%d %d\n", ind, l);
	res[ind] = l;
	s.erase(l);
	mapa[tab[res[ind]]]--;
	if (mapa[tab[res[ind]]] == 0) mapa.erase(tab[res[ind]]);
}

int main() {
scanf("%d", &n);
if (n == 2) {
	printf("-1\n");
	return 0;
}
for (i=1;i<=n;i++) {
	scanf("%d", &tab[i]);
	mapa[tab[i]]++;
}
for (i=1;i<=n;i++) s.insert(i);
for (i=1;i<=n-3;i++) {
	k = badMap();
	if (k == -1) {
		it = s.begin();
		if (tab[res[i - 1]] == *it) it++;
		go(i, *it);
	} else go(i, k);
}
it = s.begin();
bat[0] = *it; it++; bat[1] = *it; it++; bat[2] = *it;
do {
	res[n - 2] = bat[0];
	res[n - 1] = bat[1];
	res[n] = bat[2];
	if (ok()) {
		for (i=1;i<=n;i++) printf("%d ", res[i]);
		printf("\n");
		return 0;
	}
} while (next_permutation(bat, bat + 3));
printf("AA\n");
return 0;
}