神秘小游戏
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Bezime 最近在玩一款大型多人合作闯关的2D平台免费小游戏 DDNet。


在这个游戏中,有一张地图最多容纳 k 个玩家。在这张地图中,每个玩家有一个非负整数的设定值——钩子强度 power。玩家的钩子强度大小决定了他们钩子的力量。
而你扮演着这个地图的服务器,你的任务是维护这张地图中每个玩家的钩子强度,并回答一些问题。
这张地图与玩家的钩子强度遵循下面的规则:
  • 当有玩家进入地图时,地图内全部玩家的钩子强度都加 1,而新进入地图的这个玩家的钩子强度被设定为 0
  • 当地图内玩家数量达到上限值 k 时,地图外的玩家无法加入地图。
  • 当有玩家退出地图时,对于地图内钩子强度大于这个玩家的所有玩家,他们的钩子强度都减 1,而退出地图的这个玩家的钩子强度被删除。
  • 当有玩家重生时,对于地图内钩子强度小于这个玩家的所有玩家,他们的钩子强度都加 1,而重生的这个玩家的钩子强度被设定为 0
这张地图初始时没有玩家,这张地图会经历 m 秒,每一秒都会发生恰好一次以下事件之一:
  1. 玩家 name 尝试进入地图,若地图达到人数上限则进入失败,保证玩家 name 不在地图内。(name 是玩家名,一个仅由大小写英文字母组成的字符串)
  2. 玩家 name 离开地图,保证玩家 name 在地图内。
  3. 玩家 name 重生,保证玩家 name 在地图内。
  4. Bezime 询问玩家 name 的钩子强度为多少,保证玩家 name 在地图内。
  5. Bezime 查找钩子强度为 power 的玩家是谁,保证 power 小于地图内玩家数量。
你需要对每个事件都作出回答。

所有的字符串常量用双引号表示,字符串值不包括双引号。

输入描述:

第一行两个正整数 m,k(1\le m,k\le 10^3)

接下来 m 行,每行一个字符串 op(op\in\{\text{ 。若op= "find",后接一个非负整数 power(0\le power<k);否则后接一个字符串 name(1\le |name| \le 20)。两变量间以空格隔开。op 表示事件的种类,name 表示玩家的名字,|name| 表示字符串 name 的长度,power 表示玩家的钩子强度。

1. 若 op= "join",表示玩家 name 尝试进入地图。

2. 若 op= "exit",表示玩家 name 退出地图。

3. 若 op= "kill",表示玩家 name 重生。

4. 若 op= "ask",表示 Bezime 询问玩家 name 的钩子强度为多少。

5. 若 op= "find",表示 Bezime 查找钩子强度为 power 的玩家是谁。

输出描述:

输出共 m 行,每个事件的输出占一行。

对于每个事件按下列规则输出:

1. 若 op= "join",如果玩家成功加入地图,输出 "joined",否则输出 "full"。

2. 若 op= "exit",输出 "exited"。

3. 若 op= "kill",输出 "killed"。

4. 若 op= "ask",输出一个非负整数 power,表示钩子强度。

5. 若 op= "find",输出一个字符串 name,表示玩家名。
示例1

输入

复制
5 3
join Bezime
join TGSTY
join Linginging
ask Bezime
join Nailong

输出

复制
joined
joined
joined
2
full
示例2

输入

复制
6 32
join Yukimi
join lcf
join fiveminusthree
find 2
exit lcf
find 1

输出

复制
joined
joined
joined
Yukimi
exited
Yukimi
示例3

输入

复制
7 64
join axis
join direction
join lazydog
kill direction
ask axis
ask direction
ask lazydog

输出

复制
joined
joined
joined
killed
2
0
1

备注: