#CPP2H. 分组叫号

分组叫号

题意:

服务台最初没有等待人员。每个人具有一个编号和一个小组名称,依次处理以下操作:

  • IN g id:编号为 idid、属于小组 gg 的人到达。如果当前已经有这个小组的人等待,新来的人站在该小组最后一名等待人员的后面;否则,他站到所有等待人员的最后面。
  • OUT:最前面的人接受服务并离开,输出其编号。如果没有等待人员,输出 EMPTY。

同一个小组的等待人员始终站在一起。一个小组的所有人都离开后,它之后再次有人到达时,按一个当前没有等待人员的小组处理。

输入格式:

第一行一个整数 qq(1≤q≤1051 \le q \le 10^5),表示操作次数。

接下来 qq 行,每行给出一条操作。

IN 操作给出字符串 gg 和整数 idid(1≤∣g∣≤121 \le |g| \le 12,1≤id≤1091 \le id \le 10^9)。小组名称仅由小写英文字母组成。保证所有 IN 操作中的人员编号互不相同,包括已经离开的人员。

输出格式:

对每条 OUT 操作输出一行,为离开的人员编号或 EMPTY。没有 OUT 操作时不输出内容。

样例:

样例输入:

13
IN blue 11
IN red 22
IN blue 33
OUT
OUT
IN blue 44
IN green 55
IN red 66
OUT
OUT
OUT
OUT
OUT

样例输出:

11
33
22
66
44
55
EMPTY

样例解释:

人员 3333 加入时站在人员 1111 后面。两人都离开后,blue 组暂时没有等待人员,所以之后到达的人员 4444 站在人员 2222 后面。人员 6666 到达时,red 组仍有人等待,因此他站在人员 2222 后面。