{"trustable":false,"sections":[{"title":"","value":{"format":"MD","content":"一些信息编码方案要求编码后的信息要分两部分发送,第一部分称为报头,包含信息的字符。第二部分包含一个表示信息的模式。你必须编写一个能够在这种方案下解码消息的程序。\n\n你的程序编码方案的核心是一个由0和1组成的 \"key \"字符串序列,如下所示。\n\n$$0;00;01;10;000;001;010;011;100;101;110;0000;0001;\\cdots;1101;1110;00000$$\n\n序列中第一个串的长度为1,接下来的3个串的长度为2,接下来的7个串的长度为3,接下来的15个串的长度为4,等等。如果相邻的两个串的长度相同,则可以从第一个串中加1(2进制)得到第二个串。注意,序列中没有只由1组成的串。\n\n串按顺序映射到头中的字符。也就是说,第一个键(0)被映射到头的第一个字符,第二个键(00)被映射到头的第二个字符,第k个键被映射到头的第k个字符。例如,假设报头为\n\n```plaintext\nAB#TANCnrtXc\n```\n\n然后0映射到A,00映射到B,01映射到#,10映射到T,000映射到A,...,110映射到X,0000映射到c。\n\n编码后的信息只包含0和1,忽略回车。一个段的前3位数字给出了该段中键的长度的二进制表示。例如,如果前3位数字是010,那么段的其余部分由长度为2的键组成(00、01或10)。段的结尾是一串1,长度与段中键的长度相同。因此,一个长度为2的密钥段以11结束。整个编码信息以000结束(这将标志着一个段中的键的长度为0)。信息是通过将段中的键值逐次翻译成它们已被映射到的头字符来解码的。"}},{"title":"样例输入","value":{"format":"MD","content":"输入文件包含几个数据集。每个数据集都由一个单行的报头和一个可以扩展到几行的报文组成。 头部的长度仅受限于密钥字符串的最大长度为7(二进制为111)。如果在一个头中有一个字符的多个副本,那么几个键将映射到该字符。编码后的消息只包含0和1,根据所述方案,它是一个合法的编码。也就是说,消息段以3位数的长度序列开始,以适当的1\u0027s序列结束。任何给定段中的密钥都是相同长度的,它们都对应于报头中的字符。消息以000结束。\n\n回车符可以出现在消息部分的任何位置。它们不被认为是消息的一部分。\n"}},{"title":"样例输出","value":{"format":"MD","content":"对于每一个数据集,你的程序必须将其解码信息写在单独的一行上。信息之间不应该有空行。"}},{"title":"输入格式","value":{"format":"MD","content":"```plaintext\nTNM AEIOU\n0010101100011\n1010001001110110011\n11000\n$#**\\\n0100000101101100011100101000\n```"}},{"title":"输出格式","value":{"format":"MD","content":"```plaintext\nTAN ME\n##*\\$\n```"}}]}