#XMOJ11708. 旋转寿司店模拟

旋转寿司店模拟

说明

时间限制:1 Sec 内存限制:256 MB 输入文件sushi.in 输出文件sushi.out

我们需要对旋转寿司店进行简易模拟。

店内座位编号为 $1$ 至 $20$。

开店后会有客人到店并坐到座位上。每位客人持有一份想吃的菜品清单(存在极端客人,例如清单里包含十份鰯鱼)。当传送带送来清单里有的寿司时,客人一定会取走一碟,并从自己的清单中删除一份该寿司。

寿司一碟一碟地沿着传送带,依次经过 $1$ 号到 $20$ 号座位,如果全程没有客人取走,这碟寿司会被丢弃。

所有数据按时间顺序逐行给出,数据分为以下三种类型:

1. 类型 $0$:座位 $i$ 迎来一位客人,并给出该客人想吃的菜品清单。

2. 类型 $1$:一碟寿司放上传送带,按顺序经过座位 $1$ 到 $20$。

3. 类型 $2$:坐在座位 $i$ 的客人结账离店。

保证不会出现同一座位同时有多位客人、空座位的客人结账离开的情况。

每当给出类型1的数据时,你需要输出取走这碟寿司的客人对应的座位编号,单独一行。

如果全程无客人取走,输出 $-1$。

存在数据第一条就是类型 $1$ 的情况。

输入格式

第一行一个整数 $N$,代表数据的总条数,满足 $2 \le N \le 5005$。

接下来 $N$ 行,每行一条数据 $U_i$,分为三种格式:


类型 $0$ 输入格式

一行形如 $0$ $n_i$ $m_i$ $A_{i,1}$ $\dots$ $A_{i,m_i}$

含义:座位 $n_i$ 坐下一位客人,该客人的清单共有 $m_i$ 道菜品。

$A_{i,j}$ 是客人想吃的寿司名称。

约束:

$1 \le n_i \le 20$

$1 \le m_i \le 10$

$A_{i,j}$ 由小写英文字母构成,长度不超过 $17$。


类型 $1$ 输入格式

一行形如 $1$ $B_i$

含义:名称为 $B_i$ 的一碟寿司放上传送带,依次经过座位 $1$ 至 $20$。

当经过某座位时,若当前客人的清单内存在该寿司,则客人取走这一碟,并从清单中减少一份该寿司。

例如客人清单里有两份鰻鱼,取走一份后剩余一份;原本只有一份,则取走后清单不再包含鰻鱼。

$B_i$ 是由小写字母组成的寿司名称。


类型 $2$ 输入格式

一行形如 $2$ $C_i$

含义:座位 $C_i$ 的客人结账离开,该客人的菜品清单直接作废。

约束:$1 \le C_i \le 20$


所有输入数据均以空格分隔。

店内固定共 $20$ 个座位。

寿司名称由小写字母组成,最长 $17$ 个字符,保证最多存在 $53$ 种不同寿司。

输出格式

对于每一条类型 $1$ 的数据,单独一行输出取走寿司的座位编号;若全程无人取走,输出 $-1$。

样例

样例 1

11
1 toro
1 unagi
0 14 4 maguroakami hotatekai unagi maguroakami
1 saamonnmottu
1 unagi
1 unagi
1 maguro
1 kouika
1 maguroakami
1 maguroakami
2 14

-1
-1
-1
14
-1
-1
-1
14
14

样例说明:

前两碟寿司到店时店内没有客人,直接丢弃,输出 1-1

之后只有 $14$ 号座位有客人。

传送带先后送来两份鳗鱼寿司,客人清单内仅需要一份鳗鱼,因此第二份鳗鱼客人不会取。

传送带送来两份赤身金枪鱼寿司,客人清单内需要两份,因此两份都会被客人取走。

其余寿司都不在客人清单内,直接丢弃。

样例 2

15
0 14 4 maguroakami hotatekai unagi maguroakami
1 hotatekai
1 hotatekai
0 15 3 maguroakami saamonnmottu hotatekai
1 hotatekai
1 saamonnmottu
1 unagi
1 unagi
1 maguro
1 kouika
1 maguroakami
2 14
1 maguroakami
1 maguroakami
2 15

14
-1
15
15
14
-1
-1
-1
14
15
-1

样例说明:

客人一共需要三份赤身金枪鱼寿司,但 1414 号座位的客人提前结账离开,因此第三份赤身金枪鱼无人取走。

其余流程可自行推演。

题目保证存在客人离开后,该座位再次迎来新客人的情况。