你在閣樓裡一箱舊玩具中找到了一個奇怪的益智玩具。它是一塊由 $h \times w$ 個正方形格子組成的長方形棋盤。一些格子上放有彩色方塊,如圖 F.1 所示。
圖 F.1:彩色方塊對應範例輸入 1 中的初始排列。
你還不確定這個玩具的確切目標,但已開始研究重新排列方塊的可能方法。你可以將棋盤向四個主要方向之一傾斜來改變排列:向左、向右、朝向自己或遠離自己。傾斜會使所有方塊向相應方向滑動,直到被邊界或另一個方塊擋住。給定初始排列與最終排列,判斷是否存在一連串傾斜操作,能將前者變成後者。圖 F.2 展示範例輸入 1 的玩具傾斜過程。
圖 F.2:範例輸入 1 的解法。
輸入格式
輸入第一行包含兩個整數 $h$ 和 $w$($1 \le h,w \le 500$),表示棋盤的高度與寬度。接著有 $h$ 行,從最上列到最下列給出初始排列。每行包含一個長度為 $w$ 的字串,由左至右描述該列的格子。若格子為空,對應字元為句點(.);若有方塊,則以小寫字母(a-z)表示方塊顏色。不同字母表示不同顏色,同色方塊無法區分。
初始排列後有一個空行,接著是最終排列的描述,共 $h$ 行,格式與初始排列相同。
輸出格式
若存在一連串傾斜操作能將初始排列變成最終排列,輸出 yes;否則輸出 no。
範例
輸入格式 1
4 4 .r.. rgyb .b.. .yr. yrbr ..yr ...g ...b
輸出格式 1
yes
輸入格式 2
1 7 ....x.. ..x....
輸出格式 2
no
輸入格式 3
4 3 yr. ..b ry. b.. ... ..b .ry byb
輸出格式 3
no