#include <bits/stdc++.h>
using namespace std;
vector <int> solve(vector<int> A)
{
    bool f1=true, f2=true;
    int n=A.size();
    for (int i=0; i<n; i++)
    {
        if (A[i]!=(1<<i))
        {
            f1=false;
        }
        if (A[i]!=i+1)
        {
            f2=false;
        }
    }
    if (f1)
    {
        vector <int> ans;
        for (int i=n-1; i>=0; i--)
        {
            ans.push_back(i);
        }
        return ans;
    }
    else if (f2)
    {
        vector <int> ans;
        vector <bool> vis(n, false);
        int cnt=0;
        for (int i=0; i<(n+1)/2; i++)
        {
            if (cnt%2==0)
            {
                ans.push_back(i/2);
                vis[i/2]=true;
            }
            else
            {
                ans.push_back(n-i/2-1);
                vis[n-i/2-1]=true;
            }
            cnt++;
        }
        for (int i=0; i<n; i++)
        {
            if (!vis[i]) ans.push_back(i);
        }
        return ans;
    }
    else
    {
        vector <pair<int, int>> niz(n);
        map <int, int> cnter;
        for (int i=0; i<n; i++)
        {
            niz[i]={A[i], i};
            cnter[A[i]]++;
        }
        sort (niz.begin(), niz.end());
        vector <int> ans;
        vector <bool> vis(n, false);
        int cnt=0;
        for (int i=0; i<n; i++)
        {
            cnt++;
            if (cnt<=cnter[niz[i].first]/2)
            {
                ans.push_back(niz[i].second);
                vis[niz[i].second]=true;
            }
            else if (cnt==cnter[niz[i].first])
            {
                cnt=0;
            }
        }
        for (int i=0; i<n; i++)
        {
            if (!vis[i]) ans.push_back(i);
        }
        return ans;
    }
}