#P3490. [POI 2009] FIB-Words 2

[POI 2009] FIB-Words 2

Description

以下任务是第 16 届波兰信息学奥林匹克第三阶段任务“Words”的一个显著更难的版本。它并未在比赛中使用,而是为那些解决了“Words”并想要更多挑战的人提供的扩展。令 ff 是一个作用于由数字 0 和 1 组成的字符串的函数。

函数 ff 将字符串 ss 转换为通过独立且同时地将每个数字 0 替换为 1,并将每个数字 1 替换为字符串 1010

例如,f(0)=1f(0) = 1f(1)=10f(1) = 10(即 ff 将空字符串映射为空字符串)。

注意,ff 是一个单射,即一对一函数。

我们用 fnf^n 表示函数 ff 自身复合 nn 次。

特别地,f0f^0 是恒等函数 idid

我们对形如 fn(0)f^n(0) 的字符串感兴趣,其中 n0n \geq 0。这个序列以以下字符串开始:

f0(0)=0f^0(0) = 0f1(0)=1f^1(0) = 1f2(0)=10f^2(0) = 10f3(0)=101f^3(0) = 101f4(0)=10110f^4(0) = 10110f5(0)=10110101f^5(0) = 10110101

如果字符串 uu 作为一个连续(即单块)子序列出现在字符串 vv 中,我们称字符串 uu 是字符串 vv 的子串。

给定一个整数序列 a1,a2,,aka_1, a_2, \ldots, a_k

你的任务是检查形如 fai(0)f^{a_i}(0) 的字符串是否是 fn(0)f^n(0) 的子串,对于某个 n0n \geq 0,如果是,你需要找到最小的这样的 nn

Input Format

标准输入的第一行包含一个整数 kk1k10001 \leq k \leq 1000

标准输入的第二行包含 kk 个非负整数 a1,a2,,aka_1, a_2, \ldots, a_k0ai1090 \leq a_i \leq 10^9),以单个空格分隔。

Output Format

你的程序应输出 kk 行到标准输出,每个测试单元一行。

你的程序应输出最小的非负整数 nn,使得 fai(0)f^{a_i}(0)fn(0)f^n(0) 的子串,或者如果这样的 nn 不存在,则输出 NIE(波兰语中的“否”)。

2
1 2

4

Hint

题面翻译由 ChatGPT-4o 提供。