#3969. [USACO23OPEN] Moo Language B

[USACO23OPEN] Moo Language B

题目背景

FJ 对与奶牛更好地互动感兴趣,所以他决定学习 moo 语言!

题目描述

moo 语言与英语相似,但更为简单。单词只有四种类型:名词、及物动词、不及物动词和连词,每两个单词之间必须用空格隔开。标点符号仅包含逗号和句号,它会跟在单词后面,若该标点符号后面存在单词,则需要隔一个空格再放单词。

对于每个句子,都需要遵循以下格式中的一条:

  1. 名词+不及物动词。
  2. 名词+及物动词+名词(可以有多个)。及物动词后面必须有至少一个名词。除及物动词后面的第一个名词外,后面的每个名词前面都必须加一个逗号。

也可以在两个句子之间加一个连词,形成复合句,复合句不能与其他句子用连词连接。每一个句子(包括复合句)都必须以句号结尾。

FJ 的词库中有 NN 个单词、CC 个逗号和 PP 个句号。每个单词的使用次数不能超过这个单词在词库中出现的次数。现在,你要帮他输出几个符合以上要求的句子,使总单词数尽量多。

每个输入文件中共包含 TT 组样例。

输入格式

第一行输入 TT,表示样例组数。对于每组样例,格式如下:

第一行输入三个正整数 NNCCPP

在接下来的 NN 行,每行输入两个字符串。第一个字符串输入一个 FJ 可以用的单词(全为小写字母,长度为 111010),第二个字符串为以下字符串中的任意一个,表示该单词的类型:

  • noun(名词);
  • transitive-verb(及物动词);
  • intransitive-verb(不及物动词);
  • conjunction(连词)。

同一个单词可能在词库中出现多次,但是每次出现时它们的类型都相同。

输出格式

第一行输出组成符合以上要求的句子序列的最大单词数。

在第二行中,输出句子序列,使单词数最多。本题开启 SPJ,任何符合以上要求的句子序列均可通过。

请不要输出多余的空格,尤其是在每行末尾。