Amidakuji

Time Limit : 2 sec, Memory Limit : 262144 KB

あみだくじ

PCK 君はみんなでゲーム大会をしています。このゲーム大会では、大会の最後にあみだくじで順位を入れ替えます。大会には N 人のプレイヤーが参加しており、あみだくじには N 本の縦棒があります。

あみだくじは、図のように N - 1 段の部品からできており、それぞれ 1 から N-1 の番号が割り当てられています。各部品は、あみだくじの一部を横方向に切り取った部分です。各部品にはいくつかの横棒が引かれていますが、部品の中の横棒はすべて同じ高さにあります。横棒同士がつながることはありません。



大会の最後に、順位の高い人から右から左の順に縦棒が割り当てられます。PCK 君は現時点で最下位なので、左端からスタートです。例えば、上図の組み立て方では、6位だったPCK 君は、このあみだくじによって4位(右から4番目の棒)に浮上することができます。

このゲームでは、最下位の人にあみだくじを組み立てる権利が与えられます。PCK 君はうまくあみだくじの部品の順番を決めて、逆転優勝を狙っています。ただし、部品を回転することはできません。

(※補足:あみだくじのたどり方について)
あみだくじのある縦棒の上端から出発して上から下へ進む。ただし、横棒がある地点ではその横棒でつながった別の縦棒に移動する。これを、縦棒の下端にたどり着くまで繰り返す。

ゲームの参加人数とあみだくじの部品の情報を入力し、PCK 君が優勝できるかどうか判定するプログラムを作成せよ。優勝できる場合、そのあみだくじの部品の並びを1つ出力せよ。ただし、そのような並べ方が複数ある場合は、与えられた部品の番号で辞書順最小のものを出力せよ。

Input

入力は以下の形式で与えられる。

N
b1,1 b1,2 ... b1,N−1
b2,1 b2,2 ... b2,N−1
:
bN−1,1 bN−1,2 ... bN−1,N−1

1行目に大会の参加者数 N (2 ≤ N ≤ 500) が与えられる。続く N-1 行に i 番目の部品の横棒の情報が与えられる。bi,j が 1 であるとき、i 番目の部品の、左から j 本目の縦棒から j+1 番目の縦棒へ横棒が引かれていることを表す。bi,j が 0 であるとき、i 番目の部品の、左から j 本目の縦棒から j+1 番目の縦棒へ横棒は引かれていないことを表す。bi,j が 1 であるとき、bi,j+1 が 1 となるような部品は与えられない。また、横棒の総数は 10000 を越えない。

Output

PCK 君が優勝できる場合,1行目に「yes」と出力する。続く N-1 行に、あみだくじの上から順に、部品の番号の並びを出力する。そのような並びが複数ある場合、辞書順最小である並びを出力する。PCK 君が優勝できない場合、1行に「no」と出力する。

Sample Input 1

6
1 0 0 0 1
1 0 1 0 1
0 1 0 1 0
0 0 0 1 0
0 1 0 0 1

Sample Output 1

yes
1
3
2
4
5

Sample Input 2

5
0 1 0 1
0 1 0 1
1 0 1 0
1 0 0 1

Sample Output 2

yes
4
1
3
2

4 1 3 2 と 4 2 3 1 の2通りの組み立て方が可能だが、辞書順で小さい方の 4 1 3 2 を出力する。


Sample Input 3

5
1 0 0 1
0 1 0 1
1 0 0 0
0 1 0 1

Sample Output 3

no

Source: PC Koshien 2015 , All-Japan High School Programming Contest, Aizu-Wakamatsu, Japan, 2015-11-7
http://web-ext.u-aizu.ac.jp/pc-concours/