#L4248. 「NordicOI 2019」Thieves and Prisons

「NordicOI 2019」Thieves and Prisons

题目描述
题目译自 NordicOI 2019 T2 「Thieves and Prisons」

nn 个小偷和 kk 个监狱。一个小偷要么在逃,要么被关在监狱里。最初,所有小偷都在逃。

一个在逃的小偷可以被警察抓住,然后被关进其中一个监狱。一个监狱里可以有任意数量的小偷。一个在逃的小偷也可以打开一个监狱的门,这样监狱里的所有小偷都会被释放。打开一个空监狱的门是没有意义的,所以这种情况不会发生。

你会得到一个包含 mm 个事件的列表,形式为「贼 xx 被抓住了」或「贼 xx 打开了监狱的门」。你的任务是找到一个对应这些事件的监狱分配方案,或者确定这是不可能的。


输入格式

第一行输入三个整数 nn, kk, mm,表示小偷的数量、监狱的数量和事件的数量。小偷和监狱的编号分别为 1,2,,n1, 2, \dots, n1,2,,k1, 2, \dots, k

接下来有 mm 行描述这些事件。每个事件是 C x(贼 xx 被抓住了)或 O x(贼 xx 打开了监狱的门)。


输出格式

输出一个有效的监狱分配方案,包含 mm 个整数,表示每个事件对应的监狱。如果没有方案,输出 IMPOSSIBLE


样例 1

输入:

3 2 5
C 1
C 2
O 3
O 2
C 1

输出:

1 2 2 1 1

解释:

  • 事件1:贼1被抓,关进监狱1
  • 事件2:贼2被抓,关进监狱2
  • 事件3:贼3打开监狱2的门,释放贼2
  • 事件4:贼2打开监狱1的门,释放贼1
  • 事件5:贼1再次被抓,关进监狱1

样例 2

输入:

1 1 1
O 1

输出:

IMPOSSIBLE

解释:贼1在事件开始时在逃,不能打开空监狱的门。


数据范围与提示

对于所有输入数据,满足:

  • 1n,k,m1051 \le n, k, m \le 10^5

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
1 8 1n,m101 \le n, m \le 10, k=2k = 2
2 13 1n,k,m1051 \le n, k, m \le 10^5, n=kn = k
3 14 1n,m1051 \le n, m \le 10^5, k=2k = 2
4 18 1n,k,m5001 \le n, k, m \le 500
5 47 1n,k,m1051 \le n, k, m \le 10^5