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;
int n,a[100005],b[100005],deg[100005],cuoi,so;
set<int> s;
set<int> :: iterator it;
set<pair<int,int> > s2;
set<pair<int,int> > ::iterator it2;
bool check[100005];
vector <int> mkq;
int main()
{
    
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n;
    for (int i=1;i<=n;++i) {cin>>a[i];s.insert(i);deg[a[i]]++;}

    for (int i=1;i<=n;++i) s2.insert({deg[i],-i});

    if (n<=10)
    {
        for (int i=1;i<=n;++i) b[i]=i;
        do
        {
           bool  kt=true;
            for (int i=1;i<n;++i) if (a[b[i]]==b[i+1]) kt=false;
            if (kt)
            {
                for (int i=1;i<=n;++i) cout<<b[i]<<' ';return 0;
            }
        }
        while (next_permutation(b+1,b+n+1));
        cout<<-1;return 0;
    }
    for (int i=1;i<=n-10;++i)
    {

        while (check[-((*s2.rbegin()).second)])

            {
                it2=s2.end();it2--;
                s2.erase(it2);}

        if ((*s2.rbegin()).first==n-i)
        {
            cuoi=-(*s2.rbegin()).second;
            mkq.push_back(cuoi);
            check[cuoi]=true;
            s.erase(cuoi);

            so=a[cuoi];
            if (!check[so])
            {
                s2.erase({deg[so],-so});
                deg[so]--;
                s2.insert({deg[so],-so});
            }


            continue;
        }
        it=s.begin();
        so=*it;
        if (a[cuoi]!=so)
        {
            cuoi=so;
            mkq.push_back(cuoi);
            check[cuoi]=true;
            s.erase(cuoi);

            so=a[cuoi];

            if (!check[so])
            {
                s2.erase({deg[so],-so});
                deg[so]--;
                s2.insert({deg[so],-so});
            }

        }
        else
        {
            it++;
            so=*it;
            cuoi=so;
            mkq.push_back(cuoi);
            check[cuoi]=true;
            s.erase(cuoi);

            so=a[cuoi];

            if (!check[so])
            {
                s2.erase({deg[so],-so});
                deg[so]--;
                s2.insert({deg[so],-so});
            }
        }
    }
    so=0;
    for (it=s.begin();it!=s.end();it++) {b[++so]=*it;}
    do
        {
            bool kt=true;
            if (a[cuoi]==b[1]) kt=false;
            for (int i=1;i<10;++i) if (a[b[i]]==b[i+1]) kt=false;
            if (kt)
            {
                for (int i=0;i<n-10;++i) cout<<mkq[i]<<' ';
                for (int i=1;i<=10;++i) cout<<b[i]<<' ';return 0;
            }
        }
        while (next_permutation(b+1,b+11));
    cout<<-1;
    return 0;
}
