// xval = -08590966921119592875318066157760814249363867684478371501272264 6310432569
// yval = 02679624508624380488070583348879332122918700144917216750588562
import java.io.*;
import java.util.*;
import java.net.*;
import java.math.*;
//_____________________________________________________________
public class mandelbrot_bible_xy
{ 
   int sigdigits = 62;
   double xctr = 0;
   double yctr = 0;
   int scale = 1;
   String xsctr = "0";
   String ysctr = "0";
   double wide = 0;
   double high = 0;
   int ansold = 0;
   int numdigits = 162;
   boolean show = false;
//_____________________________________________________________
public static final void main(String[] args) throws Exception
{
   mandelbrot_bible_xy bnk = new mandelbrot_bible_xy();
   bnk.start(args);
}
//___________________________________________________________________________
void start(String[] args)
{
   int position = 1;
   if (args.length > 0) position = Integer.parseInt(args[0]);
   if (args.length > 1) sigdigits = Integer.parseInt(args[1]);
   String[] file = data.getFile("value.txt").split("\r\n");
   String[] words = file[position-1].split(" ");
   int value = Integer.parseInt(words[3]);
   System.out.println(file[position-1]);
   level(position - 1,value);
}
//____________________________________________________________
String level(int position, int value)
{ // 31102, 31440 position/maxposition-value/maxvalue
   String pos = Integer.toString(position);
   String val = Integer.toString(value);
   for (int i = 0; i < sigdigits+10; i++)
   {
      pos += "0";
      val += "0";
   }
   BigInteger bga = new BigInteger(pos);
   BigInteger bgb = new BigInteger("31102");
   BigInteger bgc = new BigInteger(val);
   BigInteger bgd = new BigInteger("31440");
   BigInteger bge = bga.divide(bgb);
   BigInteger bgf = bgc.divide(bgd);
   BigInteger bgg = bge.subtract(bgf);
   String xval = bgg.toString();
   boolean xneg = false;
   if (xval.substring(0,1).equals("-"));
   {
      xneg = true;
      xval = xval.substring(1);
   }
   for (int i = xval.length(); i < sigdigits + 10; i++)
   {
      xval = "0" + xval;
   }
   if (xneg) xval = "-" + xval;
   String yval = "";
   int numdig = 1;
   int val2 = 0;
   for (int i = 0; i < 10000; i++) // 10000
   {
      val2 = tryit(xval, numdig, yval);
      numdig++;
      if (val2 < 0)
      {
         int len = yval.length();
         if (yval.equals("")) yval = "0";
         BigInteger bga2 = new BigInteger(yval);
         BigInteger bg1 = new BigInteger("1");
         bga2 = bga2.subtract(bg1);
         yval = bga2.toString();
         while(yval.length() < len)
         {
            yval = "0" + yval;
         }
         val2 = 9;
         numdig--;
      }
      else
      {
         yval += Integer.toString(val2);
      }
      if (numdig > sigdigits) break;
   }
   yval = tryit2(xval,numdig,yval);
   xneg = false;
   if (xval.substring(0,1) == "-")
   {
      xneg = true;
      xval = xval.substring(1);
   }
   xval = xval.substring(0,sigdigits+1);
   if (xneg) xval = "-" + xval;
   System.out.println("x = " + xval);
   System.out.println("y = " + yval);
   System.out.println("level = " + ansold);
   xsctr = xval;
   ysctr = yval;
   scale = numdig - 2;
   Double mult = Math.pow(10,scale);
   xctr = Double.parseDouble(xsctr) / mult;
   yctr = Double.parseDouble(ysctr) / mult;
   wide = 4.0 / mult;
   high = 4.0 / mult;
   scale++;
   return(bgg.toString());
}
//____________________________________________________________
int tryit(String xval, int numdig, String yval)
{
   boolean xneg = false;
   if (xval.substring(0,1).equals("-"))
   {
      xneg = true;
      xval = xval.substring(1);
   }
   String xval2b = xval.substring(0,numdig);
   String xval2 = xval.substring(0,10 + numdig);
   if (xneg) 
   {
      xval2 = "-" + xval2;
      xval2b = "-" + xval2b;
   }
   for (int i = 9; i >= 0; i--)
   {
      String yval2 = yval + Integer.toString(i);
      for (int j = 0; j < 10; j++)
      {
         yval2 += "0";
      }
      
      int ans = isin3(xval2,yval2,numdig + 9,1000);
      if (ans > ansold + 1) return(i);
      ansold = ans;      
   }
   return(-1);
}
//____________________________________________________________
String tryit2(String xval, int numdig, String yval)
{
   String yvalold = yval;
   boolean xneg = false;
   if (xval.substring(0,1).equals("-"))
   {
      xneg = true;
      xval = xval.substring(1);
   }
   String xval2b = xval.substring(0,numdig);
   String xval2 = xval.substring(0,9 + numdig) + "";
   if (xneg) 
   {
      xval2 = "-" + xval2;
      xval2b = "-" + xval2b;
   }
   for (int i = 0; i < 1000; i++)
   {  
      int ng = yval.length();
      BigInteger bga2 = new BigInteger(yval);
      BigInteger bg1 = new BigInteger("1");
     bga2 = bga2.subtract(bg1);
      yval = bga2.toString();
      int ng2 = yval.length();
      for (int j = ng2; j < ng; j++)
      {
         yval = "0" + yval;
      }
      String yval2 = yval;
      for (int j = 0; j < 10; j++)
      {
         yval2 += "0";
      }
      int ans = isin3(xval2,yval2,numdig+9,1000);
      if (ans > ansold + 10) return(yval);
      if (ans < ansold) return(yval);
      ansold = ans;
   }
   return(yvalold);
}
//____________________________________________________________
int isin3(String x, String y, int sig, int iter)
{
   String cx = x;
   String cy = y;
   String xx = mul(x,x,sig);
   String yy = mul(y,y,sig);
   for (int i = 0; i < iter; i++)
   {
      String aa = sub(xx,yy,sig);
      String ab = mul(x,y,sig);
      String ab2 = add(ab,ab,sig);
      x = add(aa,cx,sig);
      y = add(ab2,cy,sig);
      xx = mul(x,x,sig);
      yy = mul(y,y,sig);
      String xy = add(xx,yy,sig);
      if (cmp4(xy,sig)) 
      {
         return(i);
      }
      if (xy.equals("0")) break;
   }
   return(1000000);
}
//____________________________________________________________
String mul(String val1, String val2, int sig)
{
   BigInteger bg1 = new BigInteger(val1);
   BigInteger bg2 = new BigInteger(val2);
   BigInteger bg3 = bg1.multiply(bg2);
   String out = bg3.toString();
   if (out.length() > sig)
   {
      out = out.substring(0,out.length()-sig);
   }
   return(out);
}
//____________________________________________________________
String add(String val1, String val2, int sig)
{
   if (val1.equals("-")) val1 = "0";
   if (val2.equals("-")) val2 = "0";
   if (val1 == null) val1 = "0";
   if (val2 == null) val2 = "0";
   if (val1.equals("")) val1 = "0";
   if (val2.equals("")) val2 = "0";
   BigInteger bg1 = new BigInteger(val1);
   BigInteger bg2 = new BigInteger(val2);
   BigInteger bg3 = bg1.add(bg2);
   return(bg3.toString());
}
//____________________________________________________________
String sub(String val1, String val2, int sig)
{
   BigInteger bg1 = new BigInteger(val1);
   BigInteger bg2 = new BigInteger(val2);
   BigInteger bg3 = bg1.subtract(bg2);
   return(bg3.toString());
}
//____________________________________________________________
boolean cmp4(String val1, int sig)
{
   if (val1.length() > (sig + 1))
   {
      return(true);
   }
   else
   {
      if (val1.length() < (sig + 1))
      {
         return(false);
      }
      else 
      {
         String val2 = val1.substring(0,val1.length()-sig);
         int vl2 = Integer.parseInt(val2);
         if (vl2 < 4)
         {
            return(false);
         }
         else 
         {
            return(true);
         }
      }
   }
}
}//__________________________________________________________________________
