/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static final class CypherText {
private final int key;
public CypherText
(int key,
String text
) { super();
this.key = key;
this.text = text;
}
public int getKey() {
return key;
}
return text;
}
}
public static CypherText getEncoded() {
int k
= Integer.
parseInt(reader.
readLine()); String word
= reader.
readLine(); return new CypherText(k, word);
e.printStackTrace();
return new CypherText(0, "");
}
}
public static final String decode
(final int key,
final String encoded
) { final int len = encoded.length();
char[] decoded = new char[len];
for (int i = 0; i < len; i++) {
decoded[i] = decodeChar(encoded.charAt(i), i + 1, key);
}
}
private static char decodeChar(final char encoded, final int position, final int key) {
// modulo 26 eliminates multiple wrap-arounds.
int rotate = (3 * position + key) % 26;
// apply the rotation shift to the input
int decval = (encoded - 'A') + 26 - rotate;
// use another % 26 to keep the letters in range.
return (char)('A' + (decval % 26));
}
public static void main
(String[] args
) { CypherText input = getEncoded();
String decoded
= decode
(input.
getKey(), input.
getText()); System.
out.
println("Decoded: " + decoded
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBDeXBoZXJUZXh0IHsKICAgICAgICBwcml2YXRlIGZpbmFsIGludCBrZXk7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdGV4dDsKICAgICAgICAKICAgICAgICBwdWJsaWMgQ3lwaGVyVGV4dChpbnQga2V5LCBTdHJpbmcgdGV4dCkgewogICAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBpbnQgZ2V0S2V5KCkgewogICAgICAgICAgICByZXR1cm4ga2V5OwogICAgICAgIH0KCiAgICAgICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewogICAgICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgICB9CiAgICAgICAgCiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQ3lwaGVyVGV4dCBnZXRFbmNvZGVkKCkgewogICAgICAgIHRyeSAoQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKSl7CiAgICAgICAgICAgIGludCBrID0gSW50ZWdlci5wYXJzZUludChyZWFkZXIucmVhZExpbmUoKSk7CiAgICAgICAgICAgIFN0cmluZyB3b3JkID0gcmVhZGVyLnJlYWRMaW5lKCk7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ3lwaGVyVGV4dChrLCB3b3JkKTsKICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ3lwaGVyVGV4dCgwLCAiIik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGRlY29kZShmaW5hbCBpbnQga2V5LCBmaW5hbCBTdHJpbmcgZW5jb2RlZCkgewogICAgICAgIGZpbmFsIGludCBsZW4gPSBlbmNvZGVkLmxlbmd0aCgpOwogICAgICAgIGNoYXJbXSBkZWNvZGVkID0gbmV3IGNoYXJbbGVuXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGRlY29kZWRbaV0gPSBkZWNvZGVDaGFyKGVuY29kZWQuY2hhckF0KGkpLCBpICsgMSwga2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoZGVjb2RlZCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIGNoYXIgZGVjb2RlQ2hhcihmaW5hbCBjaGFyIGVuY29kZWQsIGZpbmFsIGludCBwb3NpdGlvbiwgZmluYWwgaW50IGtleSkgewogICAgICAgIC8vIG1vZHVsbyAyNiBlbGltaW5hdGVzIG11bHRpcGxlIHdyYXAtYXJvdW5kcy4KICAgICAgICBpbnQgcm90YXRlID0gKDMgKiBwb3NpdGlvbiArIGtleSkgJSAyNjsKICAgICAgICAvLyBhcHBseSB0aGUgcm90YXRpb24gc2hpZnQgdG8gdGhlIGlucHV0CiAgICAgICAgaW50IGRlY3ZhbCA9IChlbmNvZGVkIC0gJ0EnKSArIDI2IC0gcm90YXRlOwogICAgICAgIC8vIHVzZSBhbm90aGVyICUgMjYgdG8ga2VlcCB0aGUgbGV0dGVycyBpbiByYW5nZS4KICAgICAgICByZXR1cm4gKGNoYXIpKCdBJyArIChkZWN2YWwgJSAyNikpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgQ3lwaGVyVGV4dCBpbnB1dCA9IGdldEVuY29kZWQoKTsKICAgICAgICBTdHJpbmcgZGVjb2RlZCA9IGRlY29kZShpbnB1dC5nZXRLZXkoKSwgaW5wdXQuZ2V0VGV4dCgpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlY29kZWQ6ICIgKyBkZWNvZGVkKTsKICAgIH0KCgp9