/*

 * Noah Becker

 * Marriotts Ridge High School

 * contest 4 Junior

 * Reg Hahne

 */

 

import java.io.File;

import java.util.Scanner;

import java.io.IOException;

 

public class MatrixEncryptionClient

{

      public static void main(String[] args) throws IOException

      {

            //connecting to the file

            String pathToFile = "G:";

            File inFile = new File(pathToFile, "matrixjr.txt");

            Scanner inData = new Scanner(inFile);

           

            //declaring variables

            String line = "", message, matrixNums, codedMessage = "", letter1, letter2;

            int a, b, c, d;

           

            //processing data

            for(int input = 0;input < 5;input++)

            {    

                  codedMessage = "";

                  line = inData.nextLine();

                  message = line.substring(0, line.length() - 8);

                  matrixNums = line.substring(line.length() - 8,line.length());

                  matrixNums = matrixNums.replaceAll(" ","");

                  a = Integer.valueOf(matrixNums.substring(0, 1));

                  b = Integer.valueOf(matrixNums.substring(1, 2));

                  c = Integer.valueOf(matrixNums.substring(2, 3));

                  d = Integer.valueOf(matrixNums.substring(3, 4));

                  if(message.length() % 2 != 0)

                        message += " ";

                  for(int i = 0; i < message.length();i+=2)

                  {

                        letter1 = message.substring(i, i + 1);

                        letter2 = message.substring(i + 1, i+ 2);

                        codedMessage += change2letters(letter1, letter2, a, b, c, d);

                  }

                  System.out.println(codedMessage);

            }

      }

     

      //this method will encrypt 2 letters at a time

      public static String change2letters(String l1, String l2, int a, int b,int c, int d)

      {

            int num1 = 0, num2 = 0;

            String[] alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",

                        "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " "};

            for(int index = 0;index < 27;index++)

            {

                  if(l1.equals(alphabet[index]))

                        num1 = index + 1;

                  if(l2.equals(alphabet[index]))

                        num2 = index + 1;

            }

            return changeBacktoWords(num1, num2, a, b, c, d, alphabet);

      }

     

      //this method will switch the numbers back into words in the form of a coded message

      public static String changeBacktoWords(int num1, int num2, int a, int b, int c, int d, String[] alphabet)

      {

            String letter1 = "", letter2 = "";

            int holder = num1;

            num1 = a * num1 + b * num2;

            num2 = c * holder + d * num2;

            if(num1 != 27)

                  letter1 = alphabet[(num1 % 27) - 1];

            else

                  letter1 = " ";

            if(num2 != 27)

                  letter2 = alphabet[(num2 % 27) - 1];

            else

                  letter2 = " ";

            return letter1 + letter2;

      }

}

/*

LRQBVNOE

XKIXBQUB

KEKW

RNC RAIMEJEGPE

ROUTKSBAECPXECIX

*/