ストーリー
F社のプロジェクトリーダーに就任したあなたの仕事は、チームメンバーに適切にタスクを割り振ることである。 現在取り組んでいるプロジェクトはいくつかのタスクからなり、 各チームメンバーの持つ技能レベルと各タスクごとの要求技能レベルに応じて、タスクの完了までにかかる日数の期待値が変化する。 経験豊富なあなたは、各タスクの要求技能レベルを正確に把握することが出来るが、就任したばかりのため、各チームメンバーの技能レベルはまだ全く分かっていない。 チームメンバーの技能レベルを徐々に見極めながら、適切にタスクを割り振ってほしい。
問題文
N 個のタスクを M 人のチームメンバーに割り振りたい。 各タスクは高々1人に割り振り、タスクが割り振られたチームメンバーにはそのタスクが完了するまで他のタスクを割り振ることは出来ない。 全部で K 種類の技能があり、各チームメンバー j には技能レベルを表す非負整数ベクトル bmsj=(sj,1,cdots,sj,K) が、各タスク i には要求技能レベルを表す非負整数ベクトル bmdi=(di,1,cdots,di,K) がそれぞれ定まっている。 このうち、各チームメンバーの技能レベル bms1,cdots,bmsM は入力として与えられない。
wi,j:=sumk=1Kmax(0,di,k−sj,k) と定める。 チームメンバー j にタスク i を割り振った時、タスクの完了までには以下のように定める ti,j 日かかる。
- wi,j=0 の場合、ti,j=1。
- wi,j>0 の場合、\-3 以上 3 以下の整数値をとる一様乱数を ri として、ti,j=max(1,wi,j+ri)。
t 日かかるタスクを d 日目に開始した場合、d+t−1 日目の終わりにそのタスクは完了する。 タスク間には依存関係があり、あるタスクを開始するためには、依存する全てのタスクが前日の終わりまでに完了していなければならない。 出来るだけ短い日数で全てのタスクを完了してほしい。
入出力
各入力値の範囲については入力生成の項を参照せよ。
まずはじめに、タスク数 N、チームメンバー数 M、技能数 K、依存関係数 R、各タスクの要求技能レベル bmd1,cdots,bmdN、依存するタスクの組のリスト (u1,v1),cdots,(uR,vR) が以下の形式で標準入力から与えられる。
N M K R
d1,1 cdots d1,K
vdots
dN,1 cdots dN,K
u1 v1
vdots
uR vR
(ui,vi) は、タスク vi (1leqvileqN) がタスク ui (1lequileqN) に依存しており、vi を開始する前に ui を完了しなければならないことを示している。 ui<vi を満たし、同じ(ui,vi)のペアは高々一回しか入力に含まれない。
次に、1日目から始め、毎日以下の2つの処理をせよ。
まず、その日にタスクを開始するチームメンバー ai (1leqaileqM) と担当するタスク bi (1leqbileqN) の組のリスト (a1,b1),cdots,(am,bm) を以下の形式で標準出力に1行に出力せよ。
m a1 b1 cdots am bm
**出力のあとは標準出力を flush しなければならない。**そうしない場合、TLE