#P14502. [NCPC 2025] Hidden Permutation

[NCPC 2025] Hidden Permutation

Description

当对一副牌反复应用某种固定的洗牌方式时,这副牌最终会回到其原始顺序。将洗牌方式需要应用的次数称为该洗牌方式下这副牌的 周期(period)。在本题中,我们考虑的是逆问题:我们并非给定洗牌方式并求其周期,而是给定每一种可能的周期,各有多少副牌具有该周期。你的任务是构造任意一个与这些信息一致的洗牌方式。

形式化地,存在一个隐藏排列 f=(f1,f2,,fN)f = (f_1, f_2, \dots, f_N),其中 NN 是给定的正整数。排列是一个包含 11NN 的数字且每个数字恰好出现一次的列表。令 x=x1x2xNx = x_1x_2\dots x_N 为一个二进制字符串。我们定义 f(x)f(x)(即对 xx 应用 ff)为新的二进制字符串 xf1xf2xfNx_{f_1}x_{f_2}\dots x_{f_N};并且定义 xx周期 为最小的正整数 pp,使得:

$$\underbrace{f(f(\cdots f(x)\cdots))}_{p\ \text{次}} = x.$$

可以证明,对于任意排列 ff 与任意同长度的二进制字符串 xxxx 的周期一定存在。换句话说,如果你对 xx 应用足够多次 ff,最终总会回到 xx

你将得到数字 NN,以及对每个可能的周期 pp,有多少个(在全部 2N2^N 个可能的二进制字符串中)二进制字符串的周期为 pp。你的任务是找到一个与这些信息一致的排列 ff,或者得出不存在这样的排列。

Input Format

输入包含:

  • 一行两个整数 NN, KK2N1002 \le N \le 100, 1K10001 \le K \le 1000),表示排列的长度以及可能的周期数量。
  • 一行包含 KK 个整数 p1,p2,,pKp_1, p_2, \dots, p_K1pi1091 \le p_i \le 10^9)。这些是对于隐藏排列而言,长度为 NN 的二进制字符串所有可能出现的周期。所有 pip_i 互不相同,且已按升序排列。
  • 一行包含 KK 个整数 m1,m2,,mKm_1, m_2, \dots, m_K1mi21001 \le m_i \le 2^{100})。其中 mim_i 表示周期为 pip_i 的二进制字符串数量。

注意:数字 mim_i 的大小可能非常大!

Output Format

如果不存在任何排列 ff 能与给定信息对应,则输出 impossible

否则输出一行,包含 NN 个整数 f1,f2,,fNf_1, f_2, \dots, f_N,即你选择的排列。排列必须包含 11NN 且每个数字恰好出现一次。若存在多个合法解,你可以输出任意一个。

7 6
1 2 3 4 6 12
4 4 12 24 12 72
2 3 1 5 6 7 4
91 4
1 7 13 91
2 126 8190 2475880078570760549798240131
impossible
2 1
1
4
1 2

Hint

在第二个样例中,输入几乎对应于排列 (2,3,4,,91,1)(2,3,4,\dots,91,1)。唯一的错误是输入中最后一个数字的末位应为 00 而不是 11

在第三个样例中,全部 44 个二进制字符串的周期都是 11,因此恒等排列 (1,2)(1,2) 是一个合法答案。

翻译由 ChatGPT-5 完成