#P2073. Doggone Moles

Doggone Moles

描述

一只鼹鼠在我们的院子里挖了一个矩形网格的隧道。我们对这种破坏行为感到愤怒,于是放出了几只猎犬去抓这只鼹鼠。猎犬的听觉非常灵敏,如果它们足够接近鼹鼠,就能迅速挖洞抓住它。不幸的是,鼹鼠对猎犬脚步引起的振动非常敏感,会积极躲避它们。

我们不知道猎犬被放出时鼹鼠的位置。但我们观察了猎犬在院子里的移动一段时间,鼹鼠还没有被抓到。编写一个程序,根据我们的观察推断鼹鼠可能的位置。

在我们开始记录观察时,我们知道鼹鼠不在猎犬的正下方或相邻位置(水平或垂直相邻)。在随后的每个时间间隔中,猎犬可以留在原地或水平/垂直移动一格。然后鼹鼠也可以做同样的移动。如果在任何移动前后,猎犬位于鼹鼠的正上方或相邻位置(水平或垂直),鼹鼠就会被抓住。

编写一个程序,接受对院子及猎犬在一段时间内位置的描述,并输出鼹鼠在结束时可能的位置列表。

输入

输入由一个或多个观察集组成。 每个观察集的格式如下:

第一行是44个整数:WW LL NN TT

WWLL 是正整数,表示院子的宽度(xx 方向)和长度(yy 方向)。

NN 是非负整数,表示猎犬的数量。

TT 是正整数,表示观察的时间间隔数。

接下来的 NN 行,每行包含 2T2T 个整数,表示每只猎犬在 TT 个时间步的 (xx, yy) 坐标,用空格分隔。坐标范围从 (00, 00) 到 (WW, LL)。

输入以一行 00 00 00 00 结束。

输出

对于每个观察集:

输出一行 ObservationObservation SetSet KKKK11开始)。

如果有至少一个可能的位置,则从下一行开始输出所有可能的 (xx, yy) 坐标,每行最多88对,按 yy 升序、xx 升序排列。

如果没有可能的位置,输出 NoNo possiblepossible locationslocations

输入数据 1

1 4 2 3
1 1 1 2 1 3
0 1 0 2 0 3
6 2 2 4
3 0 3 1 4 1 4 0
3 1 3 1 4 1 3 1
0 0 0 0

输出数据 1

Observation Set 1
No possible locations
Observation Set 2
(0,0) (1,0) (2,0) (6,0) (0,1) (1,1) (5,1) (6,1)
(0,2) (1,2) (2,2) (4,2) (5,2) (6,2)