假設我們手上有一台智慧型手機,如果採用直接輸入密碼的方式,很容易遭到 Shoulder-surfing 的窺視,為了防止這種行為,接下來將介紹混淆它的方法:
你將會得到一個 6 x 5 的表格,每一列(column) 將會被視為一個滾輪的一部分,而只要密碼可以在 6 x 5 的表格中即可,而每個滾輪將會有 26 個大寫英文字母,如下圖一:
假設長度為 5 的密碼 p1 p2 p3 p4 p5 ,根據順序 pi 會出現在 i-th column,如果都出現即這個密碼將會被解開。舉個例子來說,假設密碼為 "COMPU",而下圖二的形式即可作為一組開啟的可能。
在這個密碼系統中,在每列(column)中對應的密碼字元的位置毫無意義,因為只要有出現即可。假使每一個滾輪採用隨機的方式分配字元,使用者轉動每個列後,就可以按下 Enter 進入,但 should-surfer 沒有辦法可以直接地獲得密碼,在 6 x 5 的區域中,將能要嘗試 65 = 7776 種才有可能進入。這是一種很基礎的想法,用來改善
shoulder-surfer 所造成的問題。
但是很不幸,如果 shoulder-surfer 看到多次的進入盤面,需要嘗試的次數將會大幅下降。舉個例子:使用者設定的密碼為 "COMPU",但 "DPMAG" 也是個一種可能的密碼。如下圖三:
你將被給予兩張圖,而這兩張圖具有共同的密碼,現在要找到所有可能的密碼,由於可能的密碼太多種,輸出第 k-th 的密碼即可。
例如圖三中,將會前 5 組可能的合法密碼,分別為 `ABGAG' , `ABGAS', `ABGAU', `ABGPG', `ABGPS',對於每筆測資 k 會不同,如果第 k-th 的密碼不存在,表示 k 已經大於所有可能的密碼總數,輸出 "NO" 即可。
Input
輸入第一行將會有一個整數 T,表示接下來有多少測資組。對於每組測資,第一行會有一個整數 K (1 <= K < 7777),接下來將會有 6 行表示第一張圖,另外 6 行表示第二張圖。
Output
對於每組測資,輸出 k-th 的字串,如果不存在則輸出 "NO"。
Sample Input
3
1
AYGSU
DOMRA
CPFAS
XBODG
WDYPK
PRXWO
CBOPT
DOSBG
GTRAR
APMMS
WSXNU
EFGHI
5
AYGSU
DOMRA
CPFAS
XBODG
WDYPK
PRXWO
CBOPT
DOSBG
GTRAR
APMMS
WSXNU
EFGHI
64
FGHIJ
EFGHI
DEFGH
CDEFG
BCDEF
ABCDE
WBXDY
UWYXZ
XXZFG
YYFYH
EZWZI
ZGHIJ
Sample Output
ABGAG
ABGPS
NO
沒有留言:
張貼留言