苏菲(Sophie)计划夺取世界的控制权。目前,一台中央计算机控制着世界,但其软件存在严重的漏洞。苏菲要推翻计算机的统治,唯一需要做的就是将其变量 $z$ 的值设置为任何能被 $m$ 整除的整数。
目前,变量 $z$ 被设置为一个整数 $n$,以无前导零的二进制编码。在她的地下室里,苏菲建造了一门离子炮,其发射的炮弹可以翻转苏菲在计算机内存中选择的某一位(bit)。自然地,她将瞄准保存变量 $z$ 的寄存器,并且实际上可以通过精准的射击选择翻转其二进制表示中的任意一位。该离子炮只能翻转二进制表示(没有前导零!)中已有的位,不能用于在表示的任何位置(包括两端)插入新的位。然而,任何前导的 $1$ 都可以被翻转为 $0$。苏菲可以根据需要射击任意多次,但每次射击都会增加她的阴谋被发现的几率。因此,她希望最小化射击次数。
帮助苏菲夺取政权。编写一个程序,从标准输入中读取存储在变量 $z$ 中的当前值 $n$ 和一个数字 $m$,确定推翻计算机所需的最小射击次数、苏菲可以用最小射击次数将 $n$ 转换成的能被 $m$ 整除的不同整数的数量,以及这些整数中最小的一个,并输出这三个数字。
输入格式
输入的第一行也是唯一的一行包含两个由单个空格分隔的正整数:$n$ 和 $m$($1 \le n, m \le 10^{15}$)。前者是变量 $z$ 的初始值,而后者是 $z$ 的最终值应当是其倍数的数。
输出格式
应向标准输出打印三个由单个空格分隔的数字:推翻计算机统治所需的最小射击次数、在射击次数最少的情况下能确保推翻计算机的不同 $n'$ 的数量,以及这些 $n'$ 中的最小值。
样例
输入样例 1
30 7
输出样例 1
1 2 14
输入样例 2
69 41
输出样例 2
3 1 0
说明
在第一个样例中,变量的值为 $30$,即二进制的 $11110_{(2)}$。要使其成为 $7$ 的倍数,只需射击一次。有两种方法可以达到这个目的:将其转换为 $01110_{(2)} = 14$ 或 $11100_{(2)} = 28$。其中第一个值是最小的。
在第二个样例中,变量的值为 $69 = 1000101_{(2)}$。使其成为 $41$ 的倍数的唯一方法是将其转换为 $0 = 0000000_{(2)}$,这需要三次射击。