アシモフ博士は、ロボット工学の研究者である。彼が開発した掃除ロボット (Problem Bを見よ) を売り出したところ、注文が殺到し、大変な売れ行きを見せた。博士の元には多額の収益が舞い込んできて、彼はあっという間に大富豪になった。
博士はこの収益で、まず家を改築した。かつては9個の部屋が正方形状に並んでいた博士の家は、今では N × N 個の部屋が正方形状に並ぶようなった。そして博士は、全ての部屋に黒か白のカーペットを敷き詰めることにした。
それでもまだ十分な金が残ったので、彼はそれを、全てロボットの開発のために注ぎ込んだ。そしてついに、新しい掃除ロボットが完成したのである。
新しいロボットは、N × N 個の部屋のどれかに、東西南北のどれかの方角を向いた状態で設置され、次のように動作する:
Figure 1. 部屋の例
博士の家は改築によって広くなった。なので、たった1体のロボットに全ての部屋を掃除させることは非効率的である。幸い博士の資金は豊富にあるので、彼は複数のロボットを作り、それらを一斉に稼働させることにした。
ロボットは、次のように相互作用する。
博士の家の部屋には、ゆるやかに、しかし確実に埃が積もり続ける。博士は家を綺麗に保つために、全ての部屋について、どの時刻に積もった埃もいつかは掃除されるようにロボットを動かしたい。
しばらく考えた後、博士はどのようにロボットを配置しても、この条件を満たすことができないようなカーペットの敷き方があることに気が付いた。それでは、この条件が満たされるようなロボットの初期配置が存在するカーペットの敷き方を出力するプログラムを書いてほしい。そのような敷き方は複数通りあるかもしれないので、その中で辞書順で K 番目のものを出力せよ。
入力ファイルは、複数のデータセットから構成される。 一つのデータセットは、以下の形式で与えられる。
N K
N と K は整数で、問題文中で説明されたものと同じである。
入力の終了は、N = K = 0 であるデータセットによって示される。このケースに対して出力してはならない。
もし辞書順で K 番目のカーペットの敷き方が存在すればそれを、そうでなければ "No" と(引用符抜きで)出力せよ。
カーペットの敷き方は、それぞれ N 文字を含んだ N 行の文字列によって表される。黒いカーペット・白いカーペットが敷かれた部屋はそれぞれ、文字 'E' , '.' によって表される。 カーペットの敷き方の辞書順は、それを表す N 行の文字列を 1 行目, 2 行目, …, N 行目 の順に連結して得られる文字列の辞書順として定義される。文字を比較するとき、 'E' > '.' となることに注意せよ。
それぞれのデータセットの後に、空行を1つ出力せよ。
2 1 2 3 6 4 0 0
.. .. No ..EEEE ..E..E EEE..E E..EEE E..E.. EEEE..