#include <stdio.h>  // 引入标准输入输出库,用于scanf和printf等函数

// 函数功能:计算n的二进制表示中1的个数
// 参数:long long类型的n,表示要计算的数
// 返回值:n的二进制中1的个数
long long hanshu1(long long n)
{
    long long count = 0;  // 定义计数器,初始化为0
    while (n)  // 当n不为0时循环(处理完所有二进制位后n会变为0)
    {
        count += n & 1;  // n&1获取n的最低位,如果是1则计数器加1
        n >>= 1;  // n右移一位,处理下一个二进制位
    }
    return count;  // 返回1的个数
}

// 函数功能:计算2的b次方(当b为非负整数时)
// 参数:long long类型的b,表示指数
// 返回值:2^b的结果
long long hanshu2(long long b)
{
    long long c = 1;  // 初始值为1(2^0 = 1)
    while (b--)  // 循环b次,每次循环后b减1
    {
        c <<= 1;  // 左移1位,相当于乘以2
    }
    return c;  // 返回2^b的结果
}

int main()
{
    long long t, n;  // 定义变量t(测试用例数量)和n(输入的数)
    scanf("%lld", &t);  // 读取测试用例数量t(使用%lld匹配long long类型)
    
    while (t--)  // 循环处理t个测试用例,每次循环后t减1
    {
        scanf("%lld", &n);  // 读取当前测试用例的n值
        
        if (n != 0)  // 如果n不等于0
        {
            long long a = 0, b = 0;  // 定义a和b,初始化为0
            a = hanshu1(n);  // 计算n的二进制中1的个数,赋值给a
            
            // 计算2^a - 1,即二进制表示为a个1的数
            // 这通常用于表示值a第一次出现的位置
            b = hanshu2(a) - 1;  
            
            // 输出a和b,使用%lld匹配long long类型
            printf("%lld %lld\n", a, b);
        }
        else  // 如果n等于0
        {
            // 这里存在格式不匹配问题:
            // 0虽然可以用%d输出,但为了统一应该使用%lld
            printf("%d %d\n",0,0);
        }
    }
    return 0;  // 程序正常结束
}