#GYM104741J. 进制转换

进制转换

本题没有可用的提交语言。

Description

小 Z 刚刚学习了二进制!二进制数是用 $0$ 和 $1$ 两个数码来表示的数。它的基数为 $2$,进位规则是"逢二进一",借位规则是"借一当二"。对于一个长度为 $m$ 的二进制串,其可以表示 $[0\sim 2^m)$ 的值。聪慧的小 Z 很快引申到了 $n$ 进制数,她意识到,对于任意大于 $1$ 的正整数 $n$,一个长度为 $m$ 的 $n$ 进制数可以表示所有 $[0\sim n^m)$ 的值。但小 Z 并不满足于正整数,她还想知道某种特殊定义下的 $a/b$ 进制下的情况......

小 Z 的问题形式化地表示如下,给出一个正数 $n$ (其中 $n$ 以 $x = n \times b^m$ 的形式给出,$x$ 是一个不超过 $10^{18}$ 的正整数)、正整数 $m,a,b$ 和一个长度为 $m+1$ 的序列 $c_i$(下标从 $0$ 开始),问是否能选出一个长度为 $k$ 的非空整数序列 $s$,满足 $0\le s_1 < s_2 < \cdots < s_k \le m$,使得 $n = \sum_{i=1}^k c_{s_i} \times (\frac{a}{b})^{s_i}$。在有解的情况下,小 Z 还希望这个序列的长度 $k$ 尽量小,并想知道在满足 $k$ 最小情况下的方案数,以及其中任意一种方案。若无解的话,只要告诉小 Z 一行一个 $-1$ 表示无解即可。

小 Z 觉得 $a=b$ 非常的简单,所以她保证了 $a \ne b$;但是她又觉得这道题非常的困难,所以她又保证了对于任意 $c_i$,$c_i$ 与 $a$、$b$ 同时互质。小 Z 认为大部分选手会使用 C++ 作答,所以她还贴心的保证了对于任意 $i (0\le i\le m),c_i \times a_i^i \cdot b_i^{m-i} \le 10^{18}$。

本题有多组测试数据。

输入的第一行为一个正整数 $T$($1\le T\le 50000$),表示数据组数。每组数据共有两行输入。

每组数据的第一行包含四个用空格分隔正整数 $x,m,a,b$($1\le x,a,b \le 10^{18}$;$1\le m\le 60$;$a\ne b$),含义如上文所述;

第二行包含 $m+1$ 个用空格分隔正整数 $c_0, c_1, \cdots , c_m$,含义如上文所述。

对于每组数据,若不存在这样的序列 $s$,则输出一行一个 $-1$;

若有解,则第一行输出两个用空格分隔的整数 $k$ 和 $num$,分别表示使序列 $s$ 长度最短的长度 $k$ 和方案数 $num$;第二行输出一个长度为 $m+1$ 的 $01$ 串,表示其中一种合法方案,其中第 $i$ 个数为 $1$ 则表示数字 $i - 1$ 在序列 $s$ 中;若为 $0$ 则表示不在。

若有多种合法方案,输出其中任意一种即可。

Input

本题有多组测试数据。

输入的第一行为一个正整数 $T$($1\le T\le 50000$),表示数据组数。每组数据共有两行输入。

每组数据的第一行包含四个用空格分隔正整数 $x,m,a,b$($1\le x,a,b \le 10^{18}$;$1\le m\le 60$;$a\ne b$),含义如上文所述;

第二行包含 $m+1$ 个用空格分隔正整数 $c_0, c_1, \cdots , c_m$,含义如上文所述。

Output

对于每组数据,若不存在这样的序列 $s$,则输出一行一个 $-1$;

若有解,则第一行输出两个用空格分隔的整数 $k$ 和 $num$,分别表示使序列 $s$ 长度最短的长度 $k$ 和方案数 $num$;第二行输出一个长度为 $m+1$ 的 $01$ 串,表示其中一种合法方案,其中第 $i$ 个数为 $1$ 则表示数字 $i - 1$ 在序列 $s$ 中;若为 $0$ 则表示不在。

若有多种合法方案,输出其中任意一种即可。

3
104 3 2 4
1 1 3 3
130 1 65 143
1 2
97 3 4 6
1 1 1 1
3 1
0111
1 1
01
-1