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<iostream>
#include<queue>
using namespace std;
int N_MAX = 100001;
typedef pair<int,int> P;
int main()
{
  int n,i,j=1,xn,xb=0,k,kk,k1=0,k2=0;
  int a[N_MAX],x[N_MAX];
  bool u[N_MAX];
  priority_queue<P> q;
  cin >> n;
  if(n==2){
    cout << "-1" << endl;
    return 0;
  }
  fill(x+1,x+n+1,0);
  fill(u+1,u+n+1,0);
  for(i=1;i<=n;i++){
    cin >> a[i];
    x[a[i]]++;
  }
  for(i=1;i<=n;i++)
    q.push(P(x[i],i));
  for(i=1;i<=n;i++){
    xn=q.top().first;
    k=q.top().second;
    while(u[k]==1||xn>=n-i&&x[k]<xn){
      q.pop();
      if(u[k]==0)
        q.push(P(x[k],k));
      xn=q.top().first;
      k=q.top().second;
    }
    if(xn<n-i){
      while(u[j]==1) j++;
      k=j;
      if(xb==k){
        k++;
        while(u[k]==1) k++;
      }
    }
    if(i==n-2){
      for(kk=1;kk<=n;kk++)
        if(k1==0&&u[kk]==0&&kk!=k) k1=kk;
        else if(u[kk]==0&&kk!=k) k2=kk;
      if(a[k1]==k2&&a[k2]==k1){
        k=k1;
        if(xb==k) k=k2;
      }
    }
    cout << k << " ";
    u[k]=1;
    x[a[k]]--;
    xb=a[k];
  }
  cout << endl;
  return 0;
}