CF1277D.Let's Play the Words?

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Polycarp 有 nn 个不同的二进制单词。一个单词被称为二进制单词,当且仅当它只包含字符 '0' 和 '1'。例如,“0001”、“11”、“0” 和 “0011100” 都是二进制单词。

Polycarp 想用他的 nn 个二进制单词来玩一个叫做“单词接龙”的游戏。在这个游戏中,玩家依次说出单词,从第二个单词开始,每个单词都必须以前一个单词的最后一个字符开头。第一个单词可以任意选择。例如,以下单词序列可以在游戏中出现:“0101”、“1”、“10”、“00”、“00001”。

单词反转是指将单词中字符的顺序颠倒。例如,“0111” 反转后变为 “1110”,“11010” 反转后变为 “01011”。

可能 Polycarp 的单词集合无法按照游戏规则排列所有单词。在这种情况下,他希望反转集合中的一些单词,使得:

  • 最终的 nn 个单词仍然互不相同(即所有单词都是唯一的);
  • 存在一种排列方式,使得所有单词按照游戏规则顺序排列。

Polycarp 希望反转的单词数尽可能少。请你帮他实现这个目标。

输入格式

输入的第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4),表示测试用例的数量。接下来有 tt 组测试数据。

每组测试数据的第一行包含一个整数 nn(1≤n≤2⋅1051 \le n \le 2\cdot10^5),表示 Polycarp 的单词数量。接下来的 nn 行,每行一个单词。这些单词都非空,只包含字符 '0' 和 '1'。所有单词互不相同。

保证所有测试用例中 nn 的总和不超过 2⋅1052\cdot10^5,所有单词长度的总和不超过 4⋅1064\cdot10^6。

输出格式

对于每个测试用例,按照输入顺序输出答案。

如果该测试用例无解,输出 −1-1。否则,第一行输出 kk(0≤k≤n0 \le k \le n),表示需要反转的单词最少数量。第二行输出 kk 个不同的整数,表示需要反转的单词在输入中的下标(单词按输入顺序从 11 到 nn 编号)。如果 k=0k=0,可以省略第二行(也可以输出一个空行)。如果有多种方案,输出任意一种即可。

输入输出样例

  • 输入#1

    4
    4
    0001
    1000
    0011
    0111
    3
    010
    101
    0
    2
    00000
    00001
    4
    01
    001
    0001
    00001
    

    输出#1

    1
    3 
    -1
    0
    
    2
    1 2 
    

说明/提示

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页