#P15537. [nordic2019]Thieves and Prisons

[nordic2019]Thieves and Prisons

题目描述

nn 个小偷和 kk 座监狱。每个小偷要么正在逃跑,要么被关在某一座监狱中。初始时,所有小偷都在逃跑。

一个正在逃跑的小偷可能被警察抓住,然后被关进某一座监狱。一个正在逃跑的小偷也可能打开某一座监狱的大门。若一座监狱的大门被打开,则这座监狱中的所有小偷都会被释放。显然,打开一座空监狱没有意义,因此这种事情不会发生。

现在给出 mm 个事件,每个事件形如:

  • C x:小偷 xx 被抓住;
  • O x:小偷 xx 打开了一座监狱的大门。

你的任务是为每个事件指定对应的监狱编号,使得整个事件序列可能真实发生;如果不存在这样的指定方案,则输出 IMPOSSIBLE

输入格式

第一行包含三个整数 n,k,mn,k,m,分别表示小偷数量、监狱数量和事件数量。

小偷编号为 1,2,,n1,2,\dots,n,监狱编号为 1,2,,k1,2,\dots,k

接下来 mm 行,每行描述一个事件,格式为以下二者之一:

C x

表示小偷 xx 被抓住;

O x

表示小偷 xx 打开了一座监狱的大门。

输出格式

如果存在合法方案,输出 mm 个整数,表示每个事件对应的监狱编号。

  • 对于事件 C x,输出的监狱编号表示小偷 xx 被关进哪一座监狱;
  • 对于事件 O x,输出的监狱编号表示小偷 xx 打开哪一座监狱。

如果无解,输出:

IMPOSSIBLE

样例 1

输入

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

输出

1 2 2 1 1

样例 2

输入

1 1 1
O 1

输出

IMPOSSIBLE

数据范围与子任务

子任务 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