漫步
题号:NC292205
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}Askalana迷茫地漫步于梦境当中。
\hspace{15pt}她发现自己是一个孤独的根号1,希望找到一个同样孤独的根号0,和她恰一顿美味的火锅。
\hspace{15pt}可惜,根号0并不存在。
\hspace{15pt}对于给定的正整数 x,定义正整数 y 能够与 x 组成合法对,当且仅当 x 中二进制为 1 的数位在 y 中也为 1
\hspace{15pt}现在,给定正整数 x,你需要判断,是否存在一个整数 z 满足 1 \leq z < x,使得 xx + z 组成一个合法对。如果存在,输出任意一个满足条件的 z,否则输出 -1

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^3\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}在一行上输入一个正整数 x \left(1 \leqq x \leqq 10^{9}\right)

输出描述:

\hspace{15pt}如果不存在满足条件的答案,直接输出 -1;否则,输出任意一个满足条件的 z

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
3
12
16
19

输出

复制
1
1
4

说明

\hspace{15pt}对于第一组测试数据,12 加上 1 等于十进制 (13)_{10},即等于二进制 (1101)_2。由于十进制 (12)_{10} 的二进制表示为 (1100)_2,我们可以发现,(1100)_2 中为 1 的数位(从高到低,从一开始数)为第一、第二位,而这两个数位在 (1101)_2 中也为 1。所以,它们组成一个合法对。