#L4147. 「CCO 2019」Bad Codes

    ID: 4728 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>其他构造CCO2019最短路径编码理论自动机最优化图论广度优先搜索

「CCO 2019」Bad Codes

题目描述

译自 CCO 2019 Day2 T3「Bad Codes」。

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

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

比如,如果代码是这样:

A101A → 101 B10 B → 10 C1 C → 1 D100 D → 100

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

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

输入格式

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

输出格式

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

样例1:

5
3

这是题目描述中的例子。

样例2:

4 4
1011
1000
1111
1001
-1

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

数据规模与约定

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