#include<bits/stdc++.h>
using namespace std;

int idk[10][2000005], pozidk[10];
int ord[2000005], val[2000005];
bool ispl[2000005];

std::vector<int32_t> solve(std::vector<int32_t> A)
{
    for(int i=0;i<A.size();i++)
    {
        ord[i] = i;
        val[i] = i;
    }

    int r;
    for(int pas=0;pas<=10;pas++)
    {
        for(int c=0;c<10;c++)
            pozidk[c] = 0;
        for(int i=0;i<A.size();i++)
        {
            r = val[ord[i]] % 10;
            idk[r][pozidk[r]++] = ord[i];
        }

        int poz = 0;
        for(int c=0;c<10;c++)
            for(int i=0;i<pozidk[c];i++)
                ord[poz++] = idk[c][i];

        for(int i=0;i<A.size();i++)
            val[i] /= 10;
    }



    long long dif = 0;
    int i;
    for(int u=0;u<A.size();u++)
    {
        i = ord[u];
        if(dif < 0)
        {
            dif += A[i];
            ispl[i] = 1;
        }
        else
        {
            dif -= A[i];
            ispl[i] = 0;
        }
    }


    vector<int32_t> sol(A.size());
    int unde = 0;
    if(dif > 0)
    {
        for(int u=0;u<A.size();u++)
        {
            i = ord[u];
            if (ispl[i])
                sol[unde++] = i;
        }

        for(int u=0;u<A.size();u++)
        {
            i = ord[u];
            if (!ispl[i])
                sol[unde++] = i;
        }
    }
    else
    {
        for(int u=0;u<A.size();u++)
        {
            i = ord[u];
            if (!ispl[i])
                sol[unde++] = i;
        }

        for(int u=0;u<A.size();u++)
        {
            i = ord[u];
            if (ispl[i])
                sol[unde++] = i;
        }
    }
    return sol;
}