奧賽天地翻幣問題
山姆大叔發明了一個有趣的翻幣游戲。在一個特制的棋盤中有n x m個方格,每個方格中放1枚金幣。方格中的金幣或正面朝上,或反面朝上。棋盤的每一行的左側都有一個黑色按鈕,可以控制該行中金幣的朝向。每按一次黑色按鈕,相應行中的所有金幣翻轉。棋盤每一列上方都有一個白色按鈕,用于交換2列中的金幣。同時按第i列和第j列的白色按鈕,可以交換第i列和第j列的金幣,且保持金幣在原列中的位置和朝向。 翻幣游戲要求游戲者對于金幣在棋盤中的一個給定初始布局,通過操縱棋盤上的黑白按鈕,達到一確定的目標布局。
編程任務: 對于金幣在棋盤中的一個給定初始布局和目標布局,編程計算是否可通過操縱棋盤上的黑白按鈕,從初始布局達到目標布局。
數據輸入: 由文件coin.in提供輸入數據。文件含多個測試數據項。文件的第一行中只有1個整數k,表示共有k個測試數據項。每個測試數據項的第一行中有2個整數n 和m分別表示棋盤的行數和列數。接著的2n行中,前n行表示該測試數據項的初始布局,后n行表示該測試數據項的目標布局。每行有m個符號(+或-)表示該行中金幣的朝向。"+"表示金幣正面朝上,"-" 表示金幣反面朝上。
結果輸出: 對每個測試數據項,如果可通過操縱棋盤上的黑白按鈕,從初始布局達到目標布局則輸?quot;yes", 否則輸出"no"。所有結果輸出到文件coin.out中。 輸入文件示例
2
3 4
- + - +
+ - - +
- - - -
- + - +
+ + - -
- - - -
2 2
- -
- +
+ +
+ +
輸出文件示例
yes
no
<