#include "partition.h"
#include<iostream>
#include<vector>
#include <map>
#include <algorithm>
#include <cmath>
using namespace std;
int long long n,p,sum,s,x,a[30],b[30],i1,i2,mini,nr,bo[30],v[30],maxi;
void verif()
{
    if (abs(n-nr*2)<mini)
    {
        maxi=0;
        for (int i=1; i<=n; i++)
        if (bo[i] && v[i]>maxi) maxi=v[i],p=i;

        if ((s-maxi)*2<sum && s*2>=sum)
        {
            i2=i1=0;
            mini=abs(n-nr*2);
            for (int i=1; i<=n; i++)
            if (bo[i] && i!=p) a[++i1]=i;
            else if (bo[i]==0) b[++i2]=i;
            a[++i1]=p;
        }
    }
}
void bkt (int k)
{
    for (int i=0; i<=1; i++)
    {
        if (i==1) s=s+v[k],nr++,bo[k]=1;
        if (k<n) bkt(k+1);
        else verif();

        if (i==1) s=s-v[k],nr--,bo[k]=0;
    }

}
vector<int> solve(vector<int> A)
{
    vector<int>sol;
    p=0;
    sol.clear();
    n=A.size();
    p=n;
    sum=s=0;
    for (int i=1; i<=n; i++) bo[i]=0;
    while (A.size())
    {
        x=A.back();
        A.pop_back();
        v[p]=x;
        sum=sum+x;
        p--;
    }
    i1=i2=0;
    nr=0;
    mini=n+1;
    bkt(1);

    for (int i=1; i<=i1; i++)
    sol.push_back(a[i]-1);

    for (int i=1; i<=i2; i++)
    sol.push_back(b[i]-1);

    return sol;
}
/*
int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    cin >> t ;
    for (int test=1; test<=t; test++) {
        int n;
        cin >> n ;
        vector <int> a(n);
        for (int i=0; i<n; i++) {
            cin >> a[i] ;
        }

        for (auto ind : solve(a)) {
            cout << ind << " ";
        }
        cout << endl ;
    }
    cout << endl ;
    return 0;
}*/

