UPPER DUBLIN
INTERMEDIATE DIV
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Encryption {
public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public int[] getValues()
{
return values;
}
private int[] values;
private int a, b, c, d;
public
Encryption(String q) {
getValues(q);
decode();
}
public void getValues(String input) {
input = input.replaceAll("
", "");
StringTokenizer
token = new StringTokenizer(input, ",");
int
size = token.countTokens();
values = new int[size - 5];
int
count = 0;
while (token.hasMoreTokens()) {
if (count > 0
&& count < size - 4)
values[count
- 1] = Integer.parseInt(token.nextToken());
else if
(count == 0) {
token.nextToken();
} else if (count > size - 5) {
a = Integer.parseInt(token.nextToken());
b = Integer.parseInt(token.nextToken());
c = Integer.parseInt(token.nextToken());
d = Integer.parseInt(token.nextToken());
}
count++;
}
}
public void
decode() {
int
length = values.length / 2;
int[] decoded = new int[values.length];
int
invD = a * d - b * c;
for (int i = 0; i
< length; i++) {
int x = values[i];
int y = values[i + length];
decoded[2
* i] = (x * d - y * b) / invD;
decoded[2
* i + 1] = (-x * c + y * a) / invD;
}
values =
decoded;
}
public static void
main(String[] args) {
String c;
for (int i
= 0; i < 5; i++) {
try {
System.out.println((i + 1) + ".");
c = br.readLine();
Encryption k = new
Encryption(c);
for (int z : k.getValues()) {
z = ((z % 27) + 27) % 27;
if
(z != 0) {
System.out.print((char) (z +
64));
} else
System.out.print("
");
}
} catch (IOException
e) {
e.printStackTrace();
i--;
}
System.out.println();
}
}
}