SP2171 AMCODES - Ambiguous Codes

题目描述

在计算机科学中,通信领域研究非常广泛。随着计算机网络成为许多人日常生活的一部分,开发更快、更可靠和更安全的网络的方法是一个持续的需求。这一实际需求推动了通信理论背后的深入研究。 任何通信的建立,首先需要一个通用的代码。所谓代码,就是一种将信息从一种形式转换为另一种形式的方法,通常是为了让信息能够在不同地方之间传递。船只使用的旗语代码和电报使用的摩尔斯电码就是将字母转换成不同形式以便通信的例子。 更正式地说,代码是由一个字母表中的符号构成的字符串集合。代码中定义的每个字符串称为代码字。消息就是通过连接一组代码字来传递信息。例如,在摩尔斯电码中,字母表由连字符和点组成;字母 "S" 表示为代码字 "...",字母 "O" 表示为代码字 "---",因此摩尔斯电码中的求救信号 "SOS" 就是 "...---..."。 通信代码可能具有多种属性,有些是理想的,有些是不理想的,比如歧义性、熵、冗余性等等。在这个问题中,我们将重点考察歧义性这一重要属性。 当代码中的某些消息可以分割成不同的代码字序列时,该代码就是有歧义的。换句话说,在有歧义的代码中,一条消息可能对应多种不同的含义。比如,考虑二进制字母表,由 {0,1} 组成。对于由代码字 {10, 01, 101} 组成的代码,消息 10101 可以被理解为 10-101 或 101-01,因此该代码是有歧义的。而对于由代码字 {01, 10, 011} 组成的代码,不存在有歧义的消息,因此该代码是无歧义的。 作为计算机科学领域的一员,你需要编写一个程序来检测给定的代码是否有歧义性。如果该代码确实存在歧义,你还需指出其最短的有歧义消息的长度(即符号的数量)。

输入格式

每个测试用例由多行组成。在所有测试用例中,字母表都为十六进制数字(包括十进制数字以及大写字母 "A" 到 "F")。测试用例的第一行包含一个整数 $N$($1 \le N \le 100$),表示代码中的代码字数量。接下来的 $N$ 行,每行包含一个唯一且不为空的代码字,长度最多为 50 个十六进制数字。 输入以 $N = 0$ 结束。

输出格式

对于每个测试用例,输出单独一行。内容为提供的代码的最短有歧义消息的长度;如果代码是无歧义的,则输出 -1。 **本翻译由 AI 自动生成**