SP8624 SP8624 NY10B - Nim-B Sum

题目描述

注意:这个问题与选址建污水处理厂、铺设输电线或建设风力发电场毫无关系。NIM 是一个回文字。 $\operatorname{Nim}$ 游戏可以用任意数量的堆,每堆有任意数量的物品来玩。每一轮,玩家从一堆中拿走一个或多个(最多拿走所有)物品。在标准形式的游戏中,拿走最后一个物品的玩家获胜。对于这个游戏,有一个基于尼姆和($\operatorname{Nim-2}$ 和)的著名策略。 两个非负整数 $X$ 和 $Y$ 的 $\operatorname{Nim-B}$ 和(以 $B$ 为基数的 $\operatorname{Nim}$ 和)(记作 $\operatorname{NimSum}(B, X, Y)$)的计算方法如下: 将 $X$ 和 $Y$ 分别用 $B$ 进制表示。 $\operatorname{Nim-B}$ 和运算结果中 $B$ 进制的每一位都是 $X$ 和 $Y$ 的 $B$ 进制表示中对应位之和对 $B$ 取模的结果。例如: $\operatorname{NimSum}(2, 123, 456) = 1111011 \oplus 111001000 = 110110011 = 435$ $\operatorname{NimSum}(3, 123, 456) = 11120 \oplus 121220 = 102010 = 300$。 $\operatorname{NimSum}(4, 123, 456) = 1323 \oplus 13020 = 10303 = 307$ 对于标准形式的尼姆博弈,策略是计算所有堆大小的 $\operatorname{Nim-2}$ 和 $T$。如果在任何时候,轮到你时 $T = 0$,那么你肯定能赢。任何对手的行动都会使 $T$ 不为 $0$,而且总存在一种行动能将 $T$ 再次变为 $0$。这可以通过计算每堆的 $\operatorname{NimSum}(2, T, PS)$ 来实现;如果这个值小于堆的大小 ($PS$),则计算 $PS$ 与 $\operatorname{Nim-2}$ 和的差值,并从该堆中移除这个差值作为你的下一步行动。 编写一个程序来计算 $\operatorname{NimSum}(B, X, Y)$。

输入格式

输入的第一行包含一个整数 $P\left(1 \le P \le 1000\right)$,表示接下来的数据点数。每个数据集为一行,包含数据点编号,后跟一个空格,再后跟三个用空格分隔的十进制整数 $B$,$X$ 和 $Y$。$2 \le B, X, Y \le 2000000$。

输出格式

对于每个数据点,输出一行。该行包含数据点编号,后跟一个空格,再后跟 $N$,即 $X$ 和 $Y$ 在基数 $B$ 下的 $\operatorname{Nim}$ 和的十进制表示。

说明/提示

对于所有数据,$2 \le B, X, Y \le 2000000$。