import java.io.*;
import java.util.*;
import java.math.*;
//_____________________________________________________________
public class fail2
{ 
   String out = "";
   String[] num = new String[10];
   String genfull = "BRAJYO BRA ALHYM AO HJMYM VAO HARE";
   String quranfull = "BOM ALLE ALTHMN ALTHJM";
   String[] gen = genfull.split(" ");
   String[] quran = quranfull.split(" ");
   String factor = "19";
   Random rand = new Random();
//_____________________________________________________________
public static final void main(String[] args) throws Exception
{
   fail2 bnk = new fail2();
   bnk.start(args);
}
//_____________________________________________________________
void start(String[] args)
{
   if (args.length > 0) factor = args[0];
   int expected = 10000 / Integer.parseInt(factor);
   System.out.println("expected = " + expected);
   int max = 0;
   int qrn = startit(quran);
   int gn = startit(gen);
   if (qrn > max) max = qrn;
   if (gn > max) max = gn;
   System.out.println("Quran 1:1 = " + quranfull + " " + qrn);
   System.out.println("Genesis 1:1 = " + genfull + " " + gn);
   String[] sentences = getFile("sentences.txt").split("\r\n");
   for (int i = 0; i < sentences.length; i++)
   {
       String ltrs = sentences[i]; 
       int ttl = startit(ltrs.split(" "));
       if (ttl > max)
       {
          max = ttl;
          System.out.println(ltrs + " " + ttl);
       }
   }
   for (int i = 0; i < 1000; i++)
   {
       String ltrs = letters(); 
       int ttl = startit(ltrs.split(" "));
       if (ttl > max)
       {
          max = ttl;
          System.out.println(ltrs + " " + ttl);
       }
   }
}
//___________________________________________________________________________
int startit(String[] look)
{
   int letters = 0;
   int value = 0;
   int place = 0;
   for (int i = 0; i < num.length; i++)
   {
      num[i] = "";
   }
   num[0] = "1";
   num[1] = Integer.toString(look.length);
   for (int i = 0; i < look.length; i++)
   {
      letters += look[i].length();
      num[9] += look[i].length();
      value += value(look[i]);
      place += place(look[i]);
      num[5] += Integer.toString(value(look[i]));
      num[6] += Integer.toString(place(look[i]));
      for (int j = 0; j < look[i].length(); j++)
      {
         String s = look[i].substring(j,j+1);
         num[7] += Integer.toString(value(s));
         num[8] += Integer.toString(place(s));
      }
   }
   num[2] = Integer.toString(letters);
   num[3] = Integer.toString(value);
   num[4] = Integer.toString(place);
   BigInteger bgb = new BigInteger(factor);
   BigInteger bg0 = new BigInteger("0");
   int total = 0;
   for (int i = 0; i < 10000; i++)
   {
      StringBuffer buf = new StringBuffer();
      String val = Integer.toString(i);
      for (int j = 0; j < val.length(); j++)
      {
         String vstr = val.substring(j,j+1);
         int vnum = Integer.parseInt(vstr);
         buf.append(num[vnum]);
      }
      BigInteger bga = new BigInteger(buf.toString());
      BigInteger bgc = bga.mod(bgb);
      if (bgc.equals(bg0))
      {
         total++;
      }
      
   }
   return(total);
}
//______________________________________________________________
String letters()
{
   StringBuffer buf = new StringBuffer();
   String alphabet = "abcdefghijklmnopqrstuvwxyz     ";
   int len = rand.nextInt(9) + 19;
   for (int i = 0; i < len; i++)
   {
      int pos = rand.nextInt(alphabet.length());
      buf.append(alphabet.substring(pos,pos+1));
   }
   return(buf.toString());
}
//___________________________________________________________________________
String getFile(String file) 
{
   StringBuffer buf=new StringBuffer();String str;
  try
  {
   BufferedReader in = new BufferedReader (new FileReader (file));
   while((str=in.readLine())!=null)
   {
      buf.append(str+"\r\n");
   }
   in.close();
  }
  catch (Exception e)
  {
   System.out.println(e);
  }
   return (buf.toString());
}
//__________________________________________________
int value(String str)
{
   int total = 0;
   out = "";
   for (int i = 0; i < str.length(); i++)
   {
      int v = 0;
      String st2 = str.substring(i,i+1);
      byte[] st3 = st2.getBytes();
      byte st = st3[0];
      if (st == 'a') v = 1;
      else if (st == 'b') v = 2;
      else if (st == 'c') v = 3;
      else if (st == 'd') v = 4;
      else if (st == 'e') v = 5;
      else if (st == 'f') v = 6;
      else if (st == 'g') v = 7;
      else if (st == 'h') v = 8;
      else if (st == 'i') v = 9;
      else if (st == 'j') v = 10;
      else if (st == 'k') v = 20;
      else if (st == 'l') v = 30;    
      else if (st == 'm') v = 40;
      else if (st == 'n') v = 50;
      else if (st == 'o') v = 60;
      else if (st == 'p') v = 70;
      else if (st == 'q') v = 80;
      else if (st == 'r') v = 90;
      else if (st == 's') v = 100;
      else if (st == 't') v = 200;
      else if (st == 'u') v = 300;
      else if (st == 'v') v = 400;
      else if (st == 'w') v = 500;
      else if (st == 'x') v = 600;
      else if (st == 'y') v = 700;
      else if (st == 'z') v = 800;
      else if (st == 'A') v = 1;
      else if (st == 'B') v = 2;
      else if (st == 'G') v = 3;
      else if (st == 'D') v = 4;
      else if (st == 'H') v = 5;
      else if (st == 'V') v = 6;
      else if (st == 'Z') v = 7;
      else if (st == 'C') v = 8;
      else if (st == 'T') v = 9;
      else if (st == 'Y') v = 10;
      else if (st == 'K') v = 20;
      else if (st == 'L') v = 30;
      else if (st == 'M') v = 40;
      else if (st == 'N') v = 50;
      else if (st == 'S') v = 60;
      else if (st == 'I') v = 70;
      else if (st == 'F') v = 80;
      else if (st == 'E') v = 90;
      else if (st == 'Q') v = 100;
      else if (st == 'R') v = 200;
      else if (st == 'J') v = 300;
      else if (st == 'O') v = 400;
      total += v;
      if (i > 0) out += " + ";
      out += Integer.toString(v);
   }
   return(total);
}
//__________________________________________________
int place(String str)
{
   int total = 0;
   out = "";
   for (int i = 0; i < str.length(); i++)
   {
      int v = 0;
      String st2 = str.substring(i,i+1);
      byte[] st3 = st2.getBytes();
      byte st = st3[0];
      if (st == 'a') v = 1;
      else if (st == 'b') v = 2;
      else if (st == 'c') v = 3;
      else if (st == 'd') v = 4;
      else if (st == 'e') v = 5;
      else if (st == 'f') v = 6;
      else if (st == 'g') v = 7;
      else if (st == 'h') v = 8;
      else if (st == 'i') v = 9;
      else if (st == 'j') v = 10;
      else if (st == 'k') v = 11;
      else if (st == 'l') v = 12;    
      else if (st == 'm') v = 13;
      else if (st == 'n') v = 14;
      else if (st == 'o') v = 15;
      else if (st == 'p') v = 16;
      else if (st == 'q') v = 17;
      else if (st == 'r') v = 18;
      else if (st == 's') v = 19;
      else if (st == 't') v = 20;
      else if (st == 'u') v = 21;
      else if (st == 'v') v = 22;
      else if (st == 'w') v = 23;
      else if (st == 'x') v = 24;
      else if (st == 'y') v = 25;
      else if (st == 'z') v = 26;
      else if (st == 'A') v = 1;
      else if (st == 'B') v = 2;
      else if (st == 'G') v = 3;
      else if (st == 'D') v = 4;
      else if (st == 'H') v = 5;
      else if (st == 'V') v = 6;
      else if (st == 'Z') v = 7;
      else if (st == 'C') v = 8;
      else if (st == 'T') v = 9;
      else if (st == 'Y') v = 10;
      else if (st == 'K') v = 11;
      else if (st == 'L') v = 12;
      else if (st == 'M') v = 13;
      else if (st == 'N') v = 14;
      else if (st == 'S') v = 15;
      else if (st == 'I') v = 16;
      else if (st == 'F') v = 17;
      else if (st == 'E') v = 18;
      else if (st == 'Q') v = 19;
      else if (st == 'R') v = 20;
      else if (st == 'J') v = 21;
      else if (st == 'O') v = 22;
      total += v;
      if (i > 0) out += " + ";
      out += Integer.toString(v);
   }
   return(total);
}
}//__________________________________________________________________________
