//有变量n,n',f(n),f(n')共四个
//step1:将十进制数n转换为二进制数a
//step2:求二进制数a中1的个数x,f(n')=f(n)=x;
//step3:最早出现的n'就是2的0次方一直加到2的X次方(2的a次方-1;
#include<stdio.h>
int main()
{
    long long int t = 0;
    long long int n = 0;
    long long int i = 0;
    scanf("%lld",&t);
    while(t--)//通过while循环来打印t行数据
    {
        long long int a = 0;
        long long int b = 0;
        scanf("%lld",&n);//输入每行数据
        while(n)//每行数据进行操作
        {
            n=n&(n-1);//判断一个数据的二进制有多少个1
            a++;//每一个1就加加,a的结果等于f(n)
        }
        for(i=0;i<a;i++)
        {
            b=b*2+1;
        }
        printf("%lld %lld\n",a,b);
    }
    return 0;
}