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>
#define k first
#define u second
using namespace std;
set <int> s;
int n,i,a[100001],kq[100001],deg[100001],b[100001],m;
struct pt { int u,k; };
set <pair <int,int> > s2;
int main()
{
   // freopen("a.inp","r",stdin);
    //freopen("a.out","w",stdout);
    cin>>n;
    for(i=1;i<=n;i++) s.insert(i);
    for(i=1;i<=n;i++) { cin>>a[i]; deg[a[i]]++; }
    for(i=1;i<=n;i++) s2.insert({ deg[i],i });
    for(i=1;i<=n;i++)
    {
        if(n-i+1<=10)
        {
            m=0;
            for(set <int>::iterator it=s.begin();it!=s.end();it++) b[++m]=*it;
            do
            {
                bool kt=1;
                for(int j=1;j<m;j++)
                    if(a[b[j]]==b[j+1]) { kt=0; break; }
                if(a[kq[i-1]]==b[1]) kt=0;
                if(kt==1)
                {
                    for(int j=1;j<=m;j++) kq[i+j-1]=b[j];
                    break;
                }
            }
            while(next_permutation(b+1,b+m+1));
            if(kq[n]==0) { cout<<-1; return 0; }
            for(i=1;i<=n;i++) cout<<kq[i]<<" ";
            return 0;
        }
        set <pair <int,int> >::iterator it=s2.end(); it--;
        if((*it).k==n-i) 
        {
            kq[i]=(*it).u;
            if(a[kq[i-1]]==kq[i]) { cout<<-1; return 0; }
        }
        else
        {
            set <int>::iterator it=s.begin();
            if((*it)==a[kq[i-1]])
            {
                it++;
                if(it==s.end()) { cout<<-1; return 0; }
            }
            kq[i]=*it;
        }
        s.erase(kq[i]); s2.erase({ deg[kq[i]],kq[i] });
        int v=a[kq[i]];
        if(s.find(v)!=s.end())
        {
            s2.erase({ deg[v],v });
            s2.insert({ deg[v]-1,v });
            deg[v]--;
        }
    }
    for(i=1;i<=n;i++) cout<<kq[i]<<" ";
}
