/* 你能不能进省队? 初志贯彻! */ #include using namespace std; typedef long long ll; int T,now,cnt; ll n,pw[63],ans; struct Node{ ll c; int t; }f[63][63][63],res; bool vis[63][63][63]; inline Node F(int p,int v,int t){ if(p+__builtin_popcount(p)+v>=pw[t]) return {1,p+__builtin_popcount(p)+v-pw[t]}; if(vis[p][v][t]) return f[p][v][t]; vis[p][v][t]=1; f[p][v][t]=F(p,v,t-1); res=F(f[p][v][t].t,v+1,t-1); return f[p][v][t]={f[p][v][t].c+res.c,res.t}; } int main(){ scanf("%d",&T); pw[0]=1; for(int i=1;i<63;i++) pw[i]=pw[i-1]<<1; while(T--){ scanf("%lld",&n); now=1;ans=cnt=0; for(int i=62;~i;i--) if(n&pw[i]){ if(now>=pw[i]) now-=pw[i]; else{ res=F(now,cnt,i); // printf("%d %d %d\n",i,res.c,res.t); ans+=res.c; now=res.t; } cnt++; } if(now) puts("-1"); else printf("%lld\n",ans-1); } return 0; }