- /** ZOJ-1006 Do The Untwist
- http://acm.zju.edu.cn/show_problem.php?pid=1006
- Yimin.Li
- **/
#include <string>
using namespace std;
int GetCode(const char &ch)
{
if ( ch == '_' )
{
return 0;
}
else if ( ch == '.' )
{
return 27;
}
else if ( ch >='a' && ch <='z' )
{
return ch-'a'+1;
}
return -1;
}
char GetChar(const int &code)
{
if ( code == 0 )
{
return '_';
}
else if ( code == 27 )
{
return '.';
}
else
{
return code + 'a' - 1;
}
}
void execute(const int &key, string &cipherText)
{
int code, pIndex;
string plainText(cipherText);
string::size_type textLen = cipherText.length();
for (int i=0; i<textLen; ++i)
{
pIndex = (key * i) % textLen;
code = GetCode( cipherText[i] );
code = (code + i) % 28;
plainText[pIndex] = GetChar(code);
}
cipherText.swap(plainText);
}
int main()
{
int key;
string text;
while ( cin >> key >> text )
{
if ( key == 0 )
break;
execute(key, text);
cout << text << endl;
}
return 0;
}