641 - Do the Untwist

密碼學 (Cryptography) 是一套關於如何將訊息 (又稱為明文 (plaintext)) 轉換成暗號 (又稱為密文 (ciphertext)) 的秘密通訊方法,除非你是接收者,否則沒有人可以從密文中找出原本的明文。而將明文轉換成密文的過程,我們稱為加密 (encryption);反之,把密文轉成明文的過程被稱為解密 (decryption)。現在有一個簡單的加密方法叫做「Twist」,傳送者和接收者必須要約定一個正整數 k,做為密鑰 (secret key)。

「Twist」加密法要使用到四個陣列:plaintextciphertext 是字元陣列,而 plaincodeciphercode 是整數陣列,所有陣列的長度為 n,n 代表要被加密訊息的長度。所有陣列一開始的初始值為 0,每個陣列的元素從 0 編號到 n - 1。在這問題中,所有的訊息只會包含小寫字母、一個點 . 和底線 _ (用來代表空白)。

要被加密的訊息會儲存在 plaintext 中。給你一個密鑰 k,下面是加密的過程:首先,將 plaintext 的字元,用下面的規則轉換成正整數並儲存在 plaincode 中:_ = 0、a = 1、b = 2、…、z = 26、. = 27;接著,利用下面的公式,將 plaincode 轉換到 ciphercode 中,公式是對於所有 $i$ 從 0 到 n - 1,

$ciphercode[i] = (plaincode[ki \bmod n] - i) \bmod 28.$

(在這裡 $x \bmod y$ 代表 x 除以 y 的餘數,例如 $3 \bmod 7 = 3$$22 \bmod 8 = 6$$-1 \bmod 28 = 27$。你可以利用 C 語言的 % 運算子或是 Pascal 中 mod 運算子來計算,如果你算出是負數,就只要加個 y 就可以求出餘數)

最後,將 ciphercode 利用上面字元轉換的規則,轉成 ciphertext,因此最終的「twist 訊息」就存在 ciphertext 中。例如下面就是將 cat 字串用密鑰 5 做 twist 加密的結果:

陣列 0 1 2
plaintext c a t
plaincode 3 1 20
ciphercode 3 19 27
ciphertext c s .

你的任務就是去寫一個程式去解密,也就是說給你一個密鑰 k,要你從密文反過來推出明文。例如,給你密鑰是 5 和密文 cs.,你的程式必須輸出明文 cat

Input

輸入檔案包含一至多筆測試資料,最後會有一行只有 0 的測試資料,代表檔案結束。每筆測試資料只有一行,包含一把密鑰 k、一個空白、還有一個 twist 加密後的訊息,訊息長度最多有 70 個字元,密鑰 k 是一個正整數且不超過 300。

Output

對於每筆測資,輸出一行解密的訊息。

註:你可以假設解密一段訊息總是產生唯一解。(對於那些了解初等數論和抽象代數的人,這題目提供的所有測試資料中,k 和 n 的最大公因數都會是 1)

Sample Input

5 cs.
101 thqqxw.lui.qswer
3 b_ylxmhzjsys.virpbkr
0

Sample Output

cat
this_is_a_secret
beware._dogs_barking