You are on page 1of 3

#include<fstream>

#include<cmath>

#include<iostream>

using namespace std;


ifstream fin("hercule.in");
ofstream fout("hercule.out");

int putere(int a, int b){


int p;
p=1;
if(b==0)
p=1;
else
while(b!=0){
p=p*a;
b-=1;
}
return p;
}

int main (){


int T;
fin>>T;
for(int l=1; l<=T; l++) {
int k;
fin>>k;
int v[1000000005];
for(int j=1; j<=k; j++)

v[k]=0;
double a;
a = (log(k)*1.0)/log(2);
// caz particular 2^a
if ( int(a) == a)
for(int p=0; p<=a-1; p++)
v[putere(2,p)] = 1;

a=int (a);
for(int p=0; p<=a-1; p++)
v[putere(2,p)] = 1;
int b;
int c;
c = int(a);
b=k-putere(2,c);
cout<<b<<" ";
v[b]=1;
for(int i=0; i<=c-1; i++)
if(b==putere(2,i))
{
v[b]=0;
for(int j=1; j <= putere(2, c-2)-1; j++)
if(putere(2,c-1)+j+b<k)
if (v[putere(2,c-1)-j] == 0 && v[putere(2,c-1)+j+b]==
0)
{
v[putere(2,c-1)-j] = 1;
v[putere(2, c-1)+j+b] = 1;
break;
}
}
int sum=1;

int taieturi=0;
for(int i=1; i<=k; i++)
if(v[i]==1)
{
sum += i;
taieturi++;
}

if (sum==k)
{
fout<<taieturi<<'\n';
for(int i=1; i<=k; i++)
if(v[i]==1)
fout << i << " ";
}
else fout<<"-1";
fout<<'\n';

You might also like