import java.io.*;
import java.util.*;
import java.net.*;
import java.math.*;
import java.time.*;
//_____________________________________________________________
public class pi
{ 
   int val1 = 2701; 
   int numdigits = 5;
   String str2 = "31415"; 
   String[] sentence = "BRAJYO BRA ALHYM AO HJMYM VAO HARE".split(" ");
   String[] words2 = getFile("words2.txt").split("\r\n");
   String[] words3 = getFile("words3.txt").split("\r\n");
   String[] words4 = getFile("words4.txt").split("\r\n");
   String[] words5 = getFile("words5.txt").split("\r\n");
   String[] words6 = getFile("words6.txt").split("\r\n");
   String[] words7 = getFile("words7.txt").split("\r\n");
   String[] words8 = getFile("words8.txt").split("\r\n");
   String[] words9 = getFile("words9.txt").split("\r\n");
   String[] words10 = getFile("words10.txt").split("\r\n");
   String fullsentence = "";
   int b = 7;
   Random rand = new Random();
   String show = "";
   static String out = "";
   int max = 5;
//_____________________________________________________________
public static final void main(String[] args) throws Exception
{
   long t1 = System.nanoTime();
   pi bnk = new pi();
   bnk.start(args);
   long t2 = System.nanoTime();
   System.out.println("seconds = " + ((t2-t1)/1e9));
}
//___________________________________________________________________________
void start(String[] args)
{
   long total = 0;
  if (args.length > 0)
  {
      numdigits = 3;
      val1 = 3627;
      str2 = "27183";
      b = 17;
      sentence = new String[b];
      sentence = "EN ARCJI JN O LOGOS KAI O LOGOS JN PROS TON HEON KAI HEOS JN O LOGOS".split(" "); 
  }
  for (int j = 0; j < 1000 * max; j++)
  {
   for (int i = 0; i < 1000000; i++)
   {
      tryit();
      int gv = getvalue();
      total += gv;
      if (gv == val1)
      {
         //System.out.print(i + " ");
         String ansstr = mulwords();
         //String ansstr = ans.toString();
         if (ansstr.length() < 5) continue;
         if (ansstr.substring(0,5).equals(str2))
         {
            String show2 = "<tr>";
            LocalDateTime myObj = LocalDateTime.now();
            StringBuffer buf = new StringBuffer();
            buf.append(myObj);
            show2 += "<td>" + buf.toString() + "</td>";
            //System.out.println("words");
            for (int k = 0; k < sentence.length; k++)
            {
               show2 += "<td>" + sentence[k] + "</td>";
            }
            show2 += "<td>" + Integer.toString(val1) + "</td>";
            show2 += "<td>" + str2 + "</td>";
            show2 += show + "</tr>\r\n";
            System.out.println("\r\n" + show2);
            saveFile("equation" + Integer.toString(b) + ".txt",show2,true);
            //break;
         }
      }
   }
   System.out.print(".");
  }
   String fn = "pi" + Integer.toString(b) + ".cnt";
   String[] numval = getFile(fn).split("\r\n");
   int val = Integer.parseInt(numval[0]);
   val += max;
   saveFile(fn,Integer.toString(val),false);
   double avg = (double)total / (1000000 * 1000 * max);
   System.out.println("average = " + avg);
}
//___________________________________________________________________________
int tryit()
{
   fullsentence = "";
   for (int k = 0; k < b; k++)
   {
      int rd = (int) rand.nextInt(1000000);
      int pos = (int)((rd % numdigits) + 2);
      if (pos == 2)  sentence[k] = words2[rd % words2.length];
      if (pos == 3)  sentence[k] = words3[rd % words3.length];
      if (pos == 4)  sentence[k] = words4[rd % words4.length];
      if (pos == 5)  sentence[k] = words5[rd % words5.length];
      if (pos == 6)  sentence[k] = words6[rd % words6.length];
      if (pos == 7)  sentence[k] = words7[rd % words7.length];
      if (pos == 8)  sentence[k] = words8[rd % words8.length];
      if (pos == 9)  sentence[k] = words9[rd % words9.length];
      if (pos == 10)  sentence[k] = words10[rd % words10.length];
   }
   return(0); 
}
//_________________________________________________________________________
int getvalue()
{
   int total = 0;
   fullsentence = "";
   for (int i = 0; i < sentence.length; i++)
   {
      total += thevalue(sentence[i]);
      fullsentence += sentence[i];
   }
   return(total);
}
//______________________________________________________________________
int thevalue(String str)
{
   if (b == 7) return(value(str));
   else return(valuegreek(str));
}
//__________________________________________________________________________
String mulwords()
{
   BigInteger bga = new BigInteger("1");
   BigInteger bg7 = new BigInteger("7");
   if (b == 17) bg7 = new BigInteger("17");
   int len28 = fullsentence.length();
   String str28 = Integer.toString(len28);
   BigInteger bg28 = new BigInteger(str28);
   for (int i = 0; i < b; i++)
   {
      int val = thevalue(sentence[i]);
      String str = Integer.toString(val);
      BigInteger bg2 = new BigInteger(str);
      bga = bga.multiply(bg2);
   }
   BigInteger bgc = bg7.multiply(bga);
   BigInteger bgb = new BigInteger("1");
   for (int i = 0; i < fullsentence.length(); i++)
   {
      String s = fullsentence.substring(i,i+1);
      int v = thevalue(s);
      String s2 = Integer.toString(v);
      BigInteger bgd = new BigInteger(s2);
      bgb = bgb.multiply(bgd);
   }
   BigInteger bge = bg28.multiply(bgb);
   BigInteger bgf = bge.divide(bgc);
   String output = bgf.toString();
   show = "";
   if (output.equals(str2));
   { 
      int dgta = digits(bga.toString());
      int dgtc = digits(bgc.toString()); 
      int dgtb = digits(bgb.toString());
      int dgte = digits(bge.toString());
      int dgtf = digits(bgf.toString());
      show += "<td>";
      if (!isok(dgta)) show += "<font color='red'>";
      show += Integer.toString(dgta);
      if (!isok(dgta)) show += "</font>";
      show += "</td><td>";
      if (!isok(dgtc)) show += "<font color='red'>";
      show += Integer.toString(dgtc);
      if (!isok(dgtc)) show += "</font>";
      show += "</td><td>";
      if (!isok(dgtb)) show += "<font color='red'>";
      show += Integer.toString(dgtb);
      if (!isok(dgtb)) show += "</font>";
      show += "</td><td>";
      if (!isok(dgte)) show += "<font color='red'>";
      show += Integer.toString(dgte);
      if (!isok(dgte)) show += "</font>";
      show += "</td><td>";
      if (!isok(dgtf)) show += "<font color='red'>";
      show += Integer.toString(dgtf);
      if (!isok(dgtf)) show += "</font>";
      show += "</td>";
   }
   return(output);
}
//_______________________________________________________________________
boolean isok(int val)
{
   boolean ok = false;
   if (val % 73 == 0) ok = true;
   else if (val % 70 == 0) ok = true;
   else if (val % 27 == 0) ok = true;
   else if (val % 15 == 0) ok = true;
   return(ok);
}
//_______________________________________________________________________
int digits(String str)
{
   int total = 0;
   for (int i = 0; i < str.length(); i++)
   {
      String s = str.substring(i,i+1);
      int val = Integer.parseInt(s);
      total += val;
   }
   int count = 0;
   for (int i = str.length() - 1; i >= 0; i--)
   {
      String s = str.substring(i,i+1);
      if (!s.equals("0")) break;
      count++;
   }
   if (count > 7) if (b == 7) total += count + 1;
   return(total);
}
//___________________________________________________________________________
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());
}
//___________________________________________________________________________
public static void saveFile(String file, String str, boolean append) 
{
  try
  {
   BufferedWriter out = new BufferedWriter(new FileWriter(file, append));
   out.write(str);
   out.close();
  }
  catch (Exception e)
  {
   System.out.println(e);
  }
}
//__________________________________________________
public static 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);
}
//__________________________________________________
public static int valuegreek(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 == 'E') v = 5;
      else if (st == 'S') 
      {
         if (i == str.length() - 1)
         {
            v = 200;
         }
         else
         {
            v = 6;
         }
      }
      else if (st == 'Z') v = 7;
      else if (st == 'J') v = 8;
      else if (st == 'H') v = 9;
      else if (st == 'I') 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 == 'X') v = 60;
      else if (st == 'O') v = 70;
      else if (st == 'P') v = 80;
      //else if (st == 'E') v = 90;
      else if (st == 'R') v = 100;
      //else if (st == 'R') v = 200;
      else if (st == 'T') v = 300;
      else if (st == 'U') v = 400;
      else if (st == 'F') v = 500;
      else if (st == 'C') v = 600;
      else if (st == 'Q') v = 700;
      else if (st == 'V') v = 800;
      total += v;
      if (i > 0) out += " + ";
      out += Integer.toString(v);
   }
   return(total);
}
}//__________________________________________________________________________
