import java.math.BigInteger;


public class Test_RSA2 {

    public static void main(String[] args) {
        BigInteger p  = new BigInteger("32416183339");
        BigInteger pminus1  = new BigInteger("32416183338");
        BigInteger q  = new BigInteger("4222234763");
        BigInteger qminus1  = new BigInteger("4222234762");
        BigInteger n   = p.multiply(q);// 136868736177707213657
        BigInteger pqminus1=pminus1.multiply(qminus1);
        BigInteger  e=new BigInteger("2147");
        BigInteger d=e.modInverse(pqminus1);
        String TheString="RSA encryption is a topic discussed a bit in CS4010.";
        String After_en_decrypting="";
        int parts=(TheString.length()/5);
        parts=((TheString.length()-5*parts)==0)?parts:(parts+1);
        BigInteger holder=BigInteger.ZERO;
        BigInteger[] encrypt=new BigInteger[parts];
        BigInteger[] decrypt=new BigInteger[parts];
        for (int i=0;i<parts;i++) {
            if (i==parts-1) {
                System.out.println(TheString.substring(i*5));
                holder=new BigInteger(TheString.substring(i*5).getBytes());
            } else {
                System.out.println(TheString.substring(i*5,i*5+5));
                holder=new BigInteger(TheString.substring(i*5,i*5+5).getBytes());
            }
            encrypt[i]=holder.modPow(e,n);
        }
        for (int i=0;i<parts;i++) {
            decrypt[i]=encrypt[i].modPow(d,n);
            After_en_decrypting=After_en_decrypting+(new String(decrypt[i].toByteArray()));
        }
        System.out.println(After_en_decrypting);
        System.exit(0);

    }
}