loj#P4147. 「CCO 2019」Bad Codes

「CCO 2019」Bad Codes

题目描述

译自 CCO 2019 Day2 T3「Bad Codes

你的朋友写了一个加密代码,想用它给你发送秘密信息。信息只由 NN 个不同的符号组成,每个符号都对应一个由最多 MM 个位组成的二进制序列。

不过,你担心这个代码可能出问题:同一个二进制序列可能对应着至少两个不同的信息。

比如,如果代码是这样:

$$\begin{aligned} A &\to 101 \\ B &\to 10 \\ C &\to 1 \\ D &\to 100 \end{aligned} $$

那么二进制序列 101101 既可以表示 AA,也可以表示 BCBC

你的任务是找出最短的二进制序列长度,该序列同时对应着至少两个不同的信息。如果没有这样的序列,那就输出 1-1

输入格式

第一行包含两个空格分隔的整数 NNMM。接下来 NN 行,每行将包含一个最多 MM 个位组成的二进制序列,表示一个符号。

输出格式

如果存在二进制序列对应至少两个信息,请输出最短序列的长度;否则,输出 1-1

4 3
101
10
1
100
3

这是题目描述中的例子。

4 4
1011
1000
1111
1001
-1

没有二进制序列对应多个信息。因为每个代码都是 44 位的,并且没有相同的代码,所以任何 4k4k 位的编码都可以唯一解码成 kk 个字符。

数据范围与提示

对于 16%16\% 的数据 N=4N=4M6M \leq 6
对于另外 28%28\% 的数据,每个二进制序列都只包含一个 11
对于 100%100\% 的数据,1N,M501 \leq N, M \leq 50