#S44M10T3. 基础博弈练习题

基础博弈练习题

题目背景

275307894a 和 xiexiyan 在疯狂加训博弈。

题目描述

你现在有 nn 张牌,初始时编号为 1,2,3,…,n1,2,3,\dots,n,给定一个 1∼n1\sim n 的排列 pp,问要进行多少次洗牌操作才能将这副牌重洗成排列 pp。

一次洗牌操作定义如下:

  • 假设你现在有的牌序列为 aa,另有一空序列 bb。

  • 选择一个 pp 满足 1≤p<n1\leq p<n,将 aa 序列 [1,p][1,p] 下标范围内的数依次加入一队列 q1q_1,将 [p+1,n][p+1,n] 下标范围内的数依次加入另一队列 q2q_2。

  • 每次选择一个非空队列,将队首放入 bb 序列的末尾并弹出,重复 nn 次。

  • 令 a=ba=b,完成一次洗牌操作。

在洗牌操作的第三步中,如果你选择了 q1q_1 的队首,则记录 A,否则记录 B。容易发现,一个长度为 nn 的,字符集仅有 AB 的序列唯一对应了一种洗牌方式。你需要输出最小步数以及洗牌方式。

输入格式

本题单个测试点内有多组测试数据,第一行一个整数 TT 表示数据组数。

对于每组数据,第一行一个整数 nn,表示牌数。

接下来一行 nn 个整数 pip_i,保证 pp 是一个排列。

输出格式

对于每组数据,第一行一个整数 kk 表示最小步数。

接下来 kk 行,每行一个长度为 nn,字符集为 AB 的字符串,表示洗牌方式。

样例

样例输入 1

5
2
2 1
3
1 3 2
3
3 2 1
4
3 1 2 4
3
3 2 1

样例输出 1

1
BA
1
ABA
2
BAA
ABA
1
BAAB
2
BAA
ABA

样例 2,3,4

见下发文件,分别满足测试点 5∼8,14∼19,20∼225\sim 8,14\sim 19,20\sim 22 的限制。大样例输出仅提供最小步数。

提示与说明

测试点编号 特殊性质
11 是样例
22 n≤2n\leq 2
3∼43\sim 4 n≤3n\leq 3
5∼85\sim 8 n≤8n\leq 8
9∼119\sim 11 n≤10n\leq 10
12∼1312\sim 13 特殊性质 A
14∼1914\sim 19 数据在所有排列中等概率随机,n≤26,∑n≤104n\leq 26,\sum n\leq 10^4
20∼2220\sim 22 n≤26,∑n≤104n\leq 26,\sum n\leq 10^4
23∼2523\sim 25 无特殊限制。

特殊性质 A :pi=(i+k) mod n+1p_i=(i+k)\bmod n+1,kk 为一常数。

对于全部数据,满足 2≤n≤52,∑n≤2×1052\leq n\leq 52,\sum n\leq 2\times 10^5,保证 pp 构成一个排列。