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;

const int MAXN = 1e5 + 5;

int N;
int a[MAXN];
int indeg[MAXN];
int ans[MAXN];

struct cmp {
	bool operator()(const int &lhs, const int &rhs) const {
		if (indeg[lhs] != indeg[rhs])
			return indeg[lhs] > indeg[rhs];
		return lhs < rhs;
	}
};

set <int, cmp> sorted;

void load() {
	scanf("%d", &N);
	for (int i = 1; i <= N; i++) {
		scanf("%d", a + i);
		indeg[a[i]]++;
	}
}

void solve() {
	if (N == 2) {
		puts("-1");
		return;
	}
	
	set <int> rest;
	for (int i = 1; i <= N; i++) {
		rest.insert(i);
		sorted.insert(i);
	}
	
	for (int i = 1; i <= N - 3; i++) {
		int node = *sorted.begin();
		if (indeg[node] == N - i) 
			ans[i] = node;
		else {
			auto it = rest.begin();
			if (*it == a[ans[i - 1]])
				it++;
			ans[i] = *it;
		}
		rest.erase(ans[i]);
		sorted.erase(ans[i]);
		int dad = a[ans[i]];
		if (rest.count(dad)) {
			sorted.erase(dad);
			indeg[dad]--;
			sorted.insert(dad);
		}
	}
	
	vector <int> v;
	for (auto it : rest)
		v.push_back(it);
	
	do {
		for (int i = 0; i < v.size(); i++)
			ans[max(N - 3, 0) + i + 1] = v[i];
		bool ok = true;
		for (int i = 1; i < N; i++)
			ok &= ans[i + 1] != a[ans[i]];
		if (ok)
			break;
	} while (next_permutation(v.begin(), v.end()));
	
	for (int i = 1; i <= N; i++)
		printf("%d ", ans[i]);
	puts("");
}

int main() {
	load();
	solve();
	return 0;
}