Amiria 是一位谨慎的互联网用户,因此她正在为自己的账户设置双重身份验证。作为一种额外的预防措施,她使用了一种特殊的安全密钥来智取任何可能想要获取它的入侵者。Amiria 的安全密钥需要一个代码才能激活。要输入代码,必须将其放置在带有数字的转轮上,类似于密码挂锁。
Amiria 的安全密钥有一串 $W$ 个转轮。每个转轮上按顺序印有 $1$ 到 $N$ 的数字。通过一次转轮旋转,用户可以将当前显示的整数移动到下一个或上一个整数。转轮上的数字是循环的。这意味着 $N$ 之后的数字是 $1$,而 $1$ 之前的数字是 $N$。
没有隐藏密码。要激活 Amiria 的安全密钥,需要移动转轮,使得显示的数字序列成为回文序列。也就是说,该数字序列从左向右读和从右向左读是一样的。为了减慢入侵者的速度,Amiria 对安全密钥进行了特殊设置,使得转轮只能以 $D$ 为增量进行旋转。也就是说,在一次操作中,当前显示为 $x$ 的转轮可以变为显示 $x - D$ 或 $x + D$,并应用适当的循环规则。即,如果 $x - D < 1$,则操作后的实际显示数字为 $x - D + N$,如果 $x + D > N$,则实际显示数字为 $x + D - N$。
Amiria 想要检查这个系统会多大程度上减慢试图使用她安全密钥的入侵者的速度。给定转轮的数量以及每个转轮当前显示的数字,求出使显示的数字序列成为回文序列所需的最少操作次数,或者报告这是不可能的。
输入格式
输入的第一行给出测试用例的数量 $T$。接下来有 $T$ 个测试用例。每个测试用例包含两行。第一行包含三个整数 $W$、$N$ 和 $D$:Amiria 安全密钥中的转轮数量、每个转轮上显示的整数个数,以及 Amiria 为每个转轮设置的固定增量。第二行包含 $W$ 个整数 $X_1, X_2, \dots, X_W$,其中 $X_i$ 是从左到右第 $i$ 个转轮当前显示的数字。
输出格式
对于每个测试用例,输出一行,包含 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是使显示的数字序列成为回文序列所需的最少操作次数。如果无法通过允许的操作使显示的数字序列成为回文序列,则 $y$ 必须为 IMPOSSIBLE。
数据范围
时间限制:5 秒。 内存限制:2 GB。 $1 \le T \le 100$。 $1 \le D \le N - 1$。 $1 \le X_i \le N$,对于所有 $i$。
子任务
测试集 1(可见判决): $2 \le W \le 5$ $2 \le N \le 5$
测试集 2(可见判决): $2 \le W \le 1000$ $2 \le N \le 10^9$
样例
样例输入 1
3 5 5 4 1 4 5 5 4 3 4 2 3 4 3 2 4 2 1 4
样例输出 1
Case #1: 3 Case #2: 0 Case #3: IMPOSSIBLE
说明
在样例 1 中,通过在第一个和第四个转轮上各使用一次加法操作,并在第五个转轮上使用一次减法操作,可以将序列变为 $5\ 4\ 5\ 4\ 5$,这是一个回文序列,共需 3 次操作。没有办法用更少的移动次数使序列成为回文。
在样例 2 中,序列已经是回文,因此不需要任何操作。
在样例 3 中,两个数字必须相等,序列才能成为回文。由于转轮数值只能移动 2,且两个当前数字的奇偶性不同,因此无法做到。