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

int idk[10][1000005], pozidk[10];

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

    for(int pas=0;pas<=10;pas++)
    {
        for(int c=0;c<10;c++)
            pozidk[c] = 0;
        for(int i:ord)
        {
            idk[val[i] % 10][pozidk[val[i] % 10]++] = 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;
    }

    //for(int i=1;i<ord.size();i++)
      //  assert(A[ord[i-1]] <= A[ord[i]]);



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


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

        for(int i:ord)
            if(!ispl[i])
                sol[unde++] = i;
    }
    else
    {
        for(int i:ord)
            if(!ispl[i])
                sol[unde++] = i;

        for(int i:ord)
            if(ispl[i])
                sol[unde++] = i;
    }
    return sol;
}