#!/usr/bin/java --source 11

public final class mandelbrot
{
  static private final int MAXITER = 50;
  static private final double LIMIT = 4.0;

  private static void mandelbrot(int w, int h)
  {
    double xmin = -1.5;
    double ymin = -1;
    double invn = 2.0 / w;
    boolean checkNext = true;
    int x, y, k;
    double cr, ci, zr, zi, tr, ti, t;

    for (y = 0; y < h; y++)
    {
      ci = y * invn + ymin;

      for (x = 0; x < w; x++)
      {
        zr = 0;
        zi = 0;
        tr = 0;
        ti = 0;
        cr = x * invn + xmin;
        t = 0;

        if (checkNext)
        {
          for (k = 1; k <= MAXITER; k++)
          {
            zi = 2.0 * zr * zi + ci;
            zr = tr - ti + cr;
            ti = zi * zi;
            tr = zr * zr;
            t = tr + ti;
            if (t != t || t > LIMIT)
              break;
          }
          if (k > MAXITER)
          {
            System.out.print("1");
            checkNext = false;
          }
          else
          {
            System.out.print("0");
          }
        }
        else
        {
          for (k = 1; k <= MAXITER; k++)
          {
            zi = 2.0 * zr * zi + ci;
            zr = tr - ti + cr;
            ti = zi * zi;
            tr = zr * zr;
          }

          t = tr + ti;
          if (t != t || t >= LIMIT)
          {
            System.out.print("0");
            checkNext = true;
          }
          else
          {
            System.out.print("1");
          }
        }
      }

      System.out.println();
      System.out.flush();
    }
  }

  public static void main(String[] args)
  {
    for (int i = 1; i <= 20; i++)
      mandelbrot(200, 200);
  }
}

/*#!/usr/bin/env gbs3

Private Const MAXITER As Integer = 50
Private Const LIMIT As Float = 4.0

Sub Mandelbrot(W As Integer, H As Integer)

  Dim XMin As Float = -1.5
  Dim YMin As Float = -1
  Dim InvN As Float = 2.0 / W
  Dim CheckNext As Boolean = True
  Dim X, Y, K As Integer
  Dim Cr, Ci, Zr, Zi, {Tr}, Ti, T As Float

  For Y = 0 To H - 1

    Ci = Y * InvN + YMin

    For X = 0 To W - 1

      Zr = 0
      Zi = 0
      {Tr} = 0
      Ti = 0
      Cr = X * InvN + XMin

      If CheckNext Then

        For K = 1 To MAXITER
          Zi = 2.0 * Zr * Zi + Ci
          Zr = {Tr} - Ti + Cr
          Ti = Zi * Zi
          {Tr} = Zr * Zr
          T = {Tr} + Ti
          If IsNan(T) Or If T > LIMIT Then Break
        Next
        If K > MAXITER Then
          Print "1";
          CheckNext = False
        Else
          Print "0";
        Endif

      Else

        For K = 1 To MAXITER

          Zi = 2.0 * Zr * Zi + Ci
          Zr = {Tr} - Ti + Cr
          Ti = Zi * Zi
          {Tr} = Zr * Zr

        Next

        T = {Tr} + Ti
        If IsNan(T) Or If T > LIMIT Then
          Print "0";
          CheckNext = True
        Else
          Print "1";
        Endif

      Endif

    Next

    Print

  Next

End

Dim I As Integer

For I = 1 To 20
  Mandelbrot(200, 200)
Next

Error CStr(Jit.Time)

*/
