#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
int n;
int danger[100009];
int a[100009];
set<int> s;
set<pii> sdb;
vi ans;
void kesz()
{
    for(int x: ans) cout<<x<<" ";
    cout<<endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>a[i];
        danger[a[i]]++;
        s.insert(i);
    }
    if(n==2)
    {
        cout<<-1<<endl;
        return 0;
    }
    for(int i=1; i<=n; i++)
    {
        sdb.insert({-danger[i], i});
    }
    int tabu=0;
    while(s.size()>3)
    {
        auto sdbit=sdb.begin();
        if(-sdbit->F == (int)(s.size())-1)
        {
            int x=sdbit->S;
            ans.push_back(x);
            s.erase(x);
            auto it=s.begin();
            if(*it == a[x])
            {
                it++;
                ans.push_back(*it);
                it--;
                ans.push_back(*it);
                it++;
                it++;
            }
            while(it!=s.end())
            {
                ans.push_back(*it);
                it++;
            }
            kesz();
            return 0;
        }
        auto it=s.begin();
        int kivesz=*it;
        if(*it == tabu)
        {
            it++;
            kivesz=*it;
        }
        s.erase(kivesz);
        ans.push_back(kivesz);
        tabu=a[kivesz];
        sdb.erase({-danger[kivesz], kivesz});
        sdb.erase({-danger[tabu], tabu});
        danger[tabu]--;
        sdb.insert({-danger[tabu], tabu});
    }
    vi rm;
    for(int z: s) rm.push_back(z);
    int ll=0;
    if(ans.size()>0) ll=ans.back();
    if(a[ll]!=rm[0] && a[rm[0]]!=rm[1] && a[rm[1]]!=rm[2])
    {
        ans.push_back(rm[0]);
        ans.push_back(rm[1]);
        ans.push_back(rm[2]);
    }
    else if(a[ll]!=rm[0] && a[rm[0]]!=rm[2] && a[rm[2]]!=rm[1])
    {
        ans.push_back(rm[0]);
        ans.push_back(rm[2]);
        ans.push_back(rm[1]);
    }
    else if(a[ll]!=rm[1] && a[rm[1]]!=rm[0] && a[rm[0]]!=rm[2])
    {
        ans.push_back(rm[1]);
        ans.push_back(rm[0]);
        ans.push_back(rm[2]);
    }
    else if(a[ll]!=rm[1] && a[rm[1]]!=rm[2] && a[rm[2]]!=rm[0])
    {
        ans.push_back(rm[1]);
        ans.push_back(rm[2]);
        ans.push_back(rm[0]);
    }
    else if(a[ll]!=rm[2] && a[rm[2]]!=rm[0] && a[rm[0]]!=rm[1])
    {
        ans.push_back(rm[2]);
        ans.push_back(rm[0]);
        ans.push_back(rm[1]);
    }
    else
    {
        ans.push_back(rm[2]);
        ans.push_back(rm[1]);
        ans.push_back(rm[0]);
    }
    kesz();

    return 0;
}
