#P1107. W's Cipher

W's Cipher

描述

怪异的沃利(Weird Wally)的无线小部件公司(Wireless Widgets, Inc.)生产各种各样的小型无线、具备网络功能的设备,范围从狗项圈到铅笔,再到钓鱼浮标。所有这些设备的内存都非常小。像高级加密标准(AES)的候选算法 Rijndael 这样的加密算法,虽然被证明是安全的,但无法在如此小的内存中运行。为了给这些设备的传输提供一定的安全性,WWWW 公司使用了以下你需要实现的加密算法。

加密一条消息需要三个整数密钥 k1k_1k2k_2k3k_3。字母 [ai][a - i] 构成第一组,[jr][j - r] 构成第二组,其他所有字母([sz][s - z] 和下划线 _)构成第三组。在每组中,消息里的字母向左旋转 kik_i 个位置。每组的旋转都是独立于其他两组进行的。解密消息则意味着在每组中向右旋转 kik_i 个位置。

考虑消息 the_quick_brown_fox,使用 kik_i 值分别为 223311 进行加密。加密后的字符串是 _icuo_bfnwhoq_kxert。下面的图展示了三个字符组中每个组的一个字符的解密(向右旋转)过程。

观察第一组字母 [ai][a - i],我们看到 {i,c,b,f,h,e} 出现在加密消息中的位置 {2,3,7,8,11,17}。在向右旋转 k1=2k_1 = 2 之后,这些位置包含的字母是 {h,e,i,c,b,f}。下面的表格展示了在第一组进行所有旋转,然后在第二组进行所有旋转,最后在第三组进行所有旋转后得到的中间字符串。在一个组中旋转字母不会改变其他组中的任何字母。

所有输入字符串只包含小写字母和下划线(_)。每个字符串最长为 8080 个字符。kik_i 都是 11100100 范围内的正整数。

输入

输入由一个或多个加密消息的信息组成。每个问题都以包含 k1k_1k2k_2k3k_3 的一行开始,紧接着是包含加密消息的一行。当一行中所有密钥值都为 00 时,表示输入结束。

输出

对于每个加密消息,输出是包含解密后字符串的单行内容。

输入示例

2 3 1
_icuo_bfnwhoq_kxert
1 1 1
bcalmkyzx
3 7 4
wcb_mxfep_dorul_eov_qtkrhe_ozany_dgtoh_u_eji
2 4 3
cjvdksaltbmu
0 0 0

输出示例

the_quick_brown_fox
abcklmxyz
the_quick_brown_fox_jumped_over_the_lazy_dog
ajsbktcludmv

来源

2001 年美国中中部地区竞赛