loj#P2168. 「POI2011 R3 Day1」周期性 Periodicity

「POI2011 R3 Day1」周期性 Periodicity

题目描述

译自 POI 2011 Round 3. Day 1. C「Periodicity

Bitotia 国王 Byteasar 宣布了要对他臣民的名字进行改革。Bitotia 人的名字经常包含重复的短语,例如名字「Abiabuabiab」中短语「abiab」出现了两次。Byteasar 试图将他的臣民的名字改成和他们之前名字一样长的 0101 串。并且他十分希望新名字也能反映之前名字的重复规律。

接下来,为了简化说明,我们将区分字母的大小写。对于任意字符(字母或 0/10/1)序列 w=w1w2wk w = w_1 w_2 \ldots w_k ,如果存在一个整数 p (1p<k)p\ (1 \le p \lt k),对于所有 i=1,,kp i = 1, \ldots, k - p 都有 wi=wi+p w_i = w_{i+p} ,则整数 ppww 的一个周期。我们记 ww 的所有周期的集合为 Per(w) \mathrm{Per}(w) 。比如,Per(ABIABUABIAB)={6,9} \mathrm{Per}(\mathrm{ABIABUABIAB})=\{6, 9\} Per(01001010010)={5,8,10} \mathrm{Per}(\mathrm{01001010010})=\{5, 8, 10\} Per(0000)={1,2,3} \mathrm{Per}(\mathrm{0000})=\{1, 2, 3\}

Byteasar 决定了每个名字都要变成一个满足以下条件的 0101 串:

  • 长度和原来的名字相同;
  • 和之前名字有相同的周期集合;
  • 在满足前两个条件的情况下字典序最小。

比如,ABIABUABIAB 这个名字应变为 01001101001BABBAB 变为 010010BABURBAB 变为 01000010

Byteasar 要求你写一个程序,以帮助他将其臣民的名字转换为新名字。如果你成功了,作为奖赏你可以保留你目前的名字!

输入格式

第一行包含一个整数 kk,表示要转换的名字个数;

接下来 kk 行,每行一个要转换的名字。每个名字长度都在 112×1052\times 10^5 之间,并且只包含英文大写字母。

输出格式

输出 kk 行,每行包含一个 0101 串,如果存在一个合法的转换方案,则输出字典序最小的一个,否则输出 XXX

3
ABIABUABIAB
BABBAB
BABURBAB
01001101001
010010
01000010

数据范围与提示

对于全部数据,1k20 1 \le k \le 20

对于 3030 分的数据,每个名字最多只包含 2020 个字母。

Task author: Wojciech Rytter.


注:对于 0101x1x2,xk x_1 x_2 \ldots, x_k ,它的字典序比 0101y1y2yk y_1 y_2 \ldots y_k 小,当且仅当 i[1,k]\exists i\in [1,k],有 xi<yix_i\lt y_i 且对于 j=1,,i1j=1,\ldots ,i-1xj=yjx_j=y_j