CF2275B Did Not Go to Print

题目描述

最近,K1o0n 买了一台全新的昂贵打印机,这台打印机有个显著的特点——它自带存储功能,也就是说,有时候不会立刻打印。昨天,他外出时,朋友们使用了这台新打印机。 有 $n$ 个文档,这些文档编号从 $1$ 到 $n$。最开始时,打印机的存储是空的。朋友们依次对打印机执行了 $n$ 条指令,第 $i$ 条指令为如下三种之一: 1. '1'——扫描。第 $i$ 个文档被送入设备存储区,并堆放在已存在于存储区的所有内容的最上方。 2. '2'——从存储区打印。如果存储区非空,则设备打印存储区最上方的文档并将其移除。否则,设备直接打印第 $i$ 个文档。 3. '3'——快速打印。设备直接打印第 $i$ 个文档。 今天,朋友们找到了 K1o0n,抱怨说并不是所有文档都被打印出来了。请你帮助 K1o0n 找出所有未被打印的文档编号。

输入格式

第一行包含一个整数 $t$($1\leq t\leq 10^4$),表示测试用例的数量。 每组测试数据的第一行包含一个整数 $n$($1\leq n\leq 2\times 10^5$),表示文档数量。 每组测试数据的第二行包含一个长度为 $n$ 的字符串 $s$,只由 '1'、'2'、'3' 组成,表示朋友们依次下达的指令。 保证所有测试用例中 $n$ 的总和不超过 $2\times 10^5$。

输出格式

对于每组测试数据,输出两行。 第一行输出未被打印的文档数量 $k$。 第二行输出这些文档的编号,按升序排列,用空格隔开。如果 $k=0$,则这一行为空。

说明/提示

在第一个测试用例中,第 $1$ 号文档被放入存储区,接下来的一步被打印,因此第 $2$ 号文档没有被打印。 在第二个测试用例中,第 $1$ 号文档被放入存储区,但因为下一条指令直接打印了第 $2$ 号文档,所以第 $1$ 号文档始终没有被打印。 在第五个测试用例中,第 $1$ 号文档首先放入存储区,然后第 $2$ 号文档也被放入存储区,在执行到第三条指令时,打印了存储区最上方的文档(即第 $2$ 号文档)。 由 ChatGPT 5 翻译