//是柱状数组的一个基操作
//返回n的最后一位1:lowbit(n) = n & -n
//比如 x=1010 那么返回10 x=101000 返回1000
#include<bits/stdc++.h>
using namespace std ;
int lowbit(int x) {
return x&-x;;
}
int main() {
int n;
cin>>n;
while(n--) {
int x;
cin >>x;
int res=0;
while(x) x-=lowbit(x),res++;
cout<<res<<" "; // 二进制中1的个数
}
}
//
//n的二进制表示中第k位是几 k的下标:个位是第0位,十位是第1位。。。
//比如 n为15,那么二进制位1111
//思路,①先把第k位移到最后一位,也就是把n的第k位数字右移到个位,n>>k
//②,取个位,就是x&1 合起来就是n>>k&1 也可以认为是输出二进制表示方法
#include<bits/stdc++.h>
using namespace std ;
int main()
{
int n=10;
for(int k=3;k>=0;k--) cout<<(n>>k&1);
return 0;
}