import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
public class karl extends java.applet.Applet{
  int x,y,labe;
  double stex,stey;
  Color col1,col2,col3;
  int Naw;
  int takaaw,habaaw;
  int kaw,iaw,jaw;
  double alaw,beaw,al2aw,xcaw,ycaw,yyaw,phaw,thaw,minyaw,maxyaw;
  int rraw,xjaw;
  double a1raw,a2raw,yraw;
  double ymraw,x2raw,y2raw,d3aw,d4aw,eps2;
  int x2rawI,y2rawI,rweaw;
  int yjawI,minyawI,maxyawI,x10awI,y10awI;
  double b1yaw,b2yaw,b3yaw,x0aw,x10aw,y10aw;
  int br2aw,br3aw;
  String NS,habaS,takaS;
  double Nd,takad,habad;
  public double dou(String dous){
    double dou1;
    dou1 = (Double.valueOf(dous)).doubleValue();
    return dou1;
  }
  public double randaw(){
    double rand1aw;
    rand1aw=Math.random();
    return rand1aw;
  }
  public void init(){
    col1=Color.black;
    col2=Color.white;
    col3=Color.blue;
    takaS=getParameter("takap");
    habaS=getParameter("habap");
    NS=getParameter("Np");
    habad=dou(habaS);
    takad=dou(takaS);
    Nd=dou(NS);
    if(Nd==6){
      Naw=4+(int)(3*randaw());
    }
    habaaw=(int)habad;
    habaaw=300;
    takaaw=(int)takad;
    takaaw=250;
  }

//本屋
  double x1aw[]=new double[100];
  double y1aw[]=new double[100];
  double w1aw[]=new double[100];
  int xaw[]=new int[100];
  int yaw[]=new int[100];
  int waw[]=new int[100];
  double saw[]=new double[100];
  String sssaw[]=new String[100];

  double r1aw[]=new double[100];
  double th1aw[]=new double[100];


  int i[]=new int[1000];
  int j[]=new int[1000];
  int u[]=new int[1000];
  int v[]=new int[1000];

  public double arccosaw(double ataw){
    double artn1aw;
    artn1aw=Math.acos(ataw);
    return artn1aw;
  }
  public double arcsinaw(double atasw){
    double artn1saw;
    artn1saw=Math.asin(atasw);
    return artn1saw;
  }

  public double jouaw(double aaw,double baw){
    double jou1aw;
    jou1aw=Math.pow(aaw,baw);
    return jou1aw;
  }
  public double dis(double xa1,double ya1,double xa2,double ya2){
    double disdis;
    disdis=jouaw(jouaw(xa1-xa2,2.0)+jouaw(ya1-ya2,2.0),0.5);
    return disdis;
  }

    double delta,rasta,theta,r,delta2,rasta2;
    double eps,pi;
    int xI,cou;
    double ysyoki,yr,yr1,ff,ffbi;
    double kou1,kou21,kou22,kou3,kou4,kou51,kou52,kou6;
    double kou1b,kou3b,kou4b,kou6b;
    int yI;
    double xsyoki,xr,xr1;
    int h;
    double mind,dd;
    int k,l,t,s,co,coumax;

    double deltab,rastab,delta2b,rasta2b,thetab,theta2b;
    double delta3,rasta3;


  public void paint(java.awt.Graphics g){
    pi=3.14159265358979;
    g.setColor(col1);
    g.fillRect(1,1,habaaw,takaaw);
    double cx,cy;
    cx=randaw()*(habaaw/2)+habaaw/4;
    cy=randaw()*(takaaw/2)+takaaw/4;
    for(kaw=1;kaw<=Naw;kaw++){
      x1aw[kaw-1]=randaw()*(habaaw-30)+15;
      y1aw[kaw-1]=randaw()*(takaaw-30)+15;
      r1aw[kaw-1]=dis(x1aw[kaw-1],y1aw[kaw-1],cx,cy);
      th1aw[kaw-1]=arcsinaw((y1aw[kaw-1]-cy)/r1aw[kaw-1])+pi/2;
      if(x1aw[kaw-1]>cx){
           th1aw[kaw-1]=3*pi/2-arcsinaw((y1aw[kaw-1]-cy)/r1aw[kaw-1]);
      }

      w1aw[kaw-1]=kaw;
      xaw[kaw-1]=(int)(x1aw[kaw-1]+0.5);
      yaw[kaw-1]=(int)(y1aw[kaw-1]+0.5);
      waw[kaw-1]=(int)(w1aw[kaw-1]+0.5);
      sssaw[kaw-1]=""+waw[kaw-1];
      g.setColor(col3);
      g.drawOval((int)(cx-r1aw[kaw-1]),(int)(cy-r1aw[kaw-1]),(int)r1aw[kaw-1]*2,(int)r1aw[kaw-1]*2);
      g.drawLine((int)cx,(int)cy,xaw[kaw-1],yaw[kaw-1]);
      g.setColor(col2);
      g.fillOval(xaw[kaw-1]-3,yaw[kaw-1]-3,6,6);
    }
    g.drawLine((int)cx-3,(int)cy,(int)cx+3,(int)cy);
    g.drawLine((int)cx,(int)cy-3,(int)cx,(int)cy+3);

    eps=0.1;
    eps2=0.1;
    coumax=300;
    for(k=0;k<Naw-1;k++){
      for(l=k+1;l<Naw;l++){
//x方向で描画
        for(ysyoki=(y1aw[k]+y1aw[l])/2.0-100.0;ysyoki<(y1aw[k]+y1aw[l])/2.0+100.0;ysyoki=ysyoki+100.0){
          for(xI=0;xI<=habaaw;xI++){
            yr=ysyoki;
            yr1=-100;
            ff=100;
            cou=0;
            while(dis(ff,0,0,0)>eps && cou<coumax){
              yr1=yr;
              r=dis(xI,yr,cx,cy);
              theta=arcsinaw((yr-cy)/r)+pi/2;
              if(xI>cx){
                  theta=3*pi/2-arcsinaw((yr-cy)/r);
              }
              delta=dis(0,0,0,theta-th1aw[k]);
              if(2*pi-dis(0,0,0,theta-th1aw[k])<dis(0,0,0,theta-th1aw[k])){
                  delta=2*pi-dis(0,0,0,theta-th1aw[k]);
              }
              rasta=r;
              if(r1aw[k]<r){
                  rasta=r1aw[k];
              }
              kou1=rasta*delta+dis(0,0,0,r-r1aw[k]);
              if(delta>=2 && delta<pi){
                  kou1=r+r1aw[k];
              }

              delta2=dis(0,0,0,theta-th1aw[l]);
              if(2*pi-dis(0,0,0,theta-th1aw[l])<dis(0,0,0,theta-th1aw[l])){
                  delta2=2*pi-dis(0,0,0,theta-th1aw[l]);
              }
              rasta2=r;
              if(r1aw[l]<r){
                  rasta2=r1aw[l];
              }
              kou4=rasta2*delta2+dis(0,0,0,r-r1aw[l]);
              if(delta2>=2 && delta2<pi){
                  kou4=r+r1aw[l];
              }

              ff=kou1-kou4;

              thetab=((r-(yr-cy)*(yr-cy)/r)/(r*r))/jouaw(1-jouaw((yr-cy)/r,2),0.5);
              if(xI>cx){
                  thetab=-((r-(yr-cy)*(yr-cy)/r)/(r*r))/jouaw(1-jouaw((yr-cy)/r,2),0.5);
              }
              deltab=thetab;
              if(theta<th1aw[k]){
                  deltab=-thetab;
              }
              if(2*pi-dis(0,0,0,theta-th1aw[k])<dis(0,0,0,theta-th1aw[k])){
                  deltab=-thetab;
                  if(theta<th1aw[k]){
                      deltab=thetab;
                  }
              }
              rastab=(yr-cy)/r;
              if(r1aw[k]<r){
                  rastab=0;
              }
              kou1b=rastab*delta+rasta*deltab+(yr-cy)/r;
              if(r1aw[k]>r){
                  kou1b=rastab*delta+rasta*deltab-(yr-cy)/r;
              }
              if(delta>=2 && delta<pi){
                  kou1b=(yr-cy)/r;
              }

              theta2b=((r-(yr-cy)*(yr-cy)/r)/(r*r))/jouaw(1-jouaw((yr-cy)/r,2),0.5);
              if(xI>cx){
                  theta2b=-((r-(yr-cy)*(yr-cy)/r)/(r*r))/jouaw(1-jouaw((yr-cy)/r,2),0.5);
              }
              delta2b=theta2b;
              if(theta<th1aw[l]){
                  delta2b=-theta2b;
              }
              if(2*pi-dis(0,0,0,theta-th1aw[l])<dis(0,0,0,theta-th1aw[l])){
                  delta2b=-theta2b;
                  if(theta<th1aw[l]){
                      delta2b=theta2b;
                  }
              }
              rasta2b=(yr-cy)/r;
              if(r1aw[l]<r){
                  rasta2b=0;
              }
              kou4b=rasta2b*delta2+rasta2*delta2b+(yr-cy)/r;
              if(r1aw[l]>r){
                  kou4b=rasta2b*delta2+rasta2*delta2b-(yr-cy)/r;
              }
              if(delta2>=2 && delta2<pi){
                  kou4b=(yr-cy)/r;
              }

              ffbi=kou1b-kou4b;
              yr=yr-ff/ffbi;
              cou++;
            }//wend
            if(dis(ff,0,0,0)<eps){
              br2aw=0;
              if(kou1/kou4>1.0+eps2 || kou4/kou1>1.0+eps2){
                  br2aw=100;
              }
              if(br2aw==0){
                  mind=kou1;
                  for(h=0;h<Naw;h++){
                      if(h!=k && h!=l){
                          delta3=dis(0,0,0,theta-th1aw[h]);
                          if(2*pi-dis(0,0,0,theta-th1aw[h])<dis(0,0,0,theta-th1aw[h])){
                              delta3=2*pi-dis(0,0,0,theta-th1aw[h]);
                          }
                          rasta3=r;
                          if(r1aw[h]<r){
                              rasta3=r1aw[h];
                          }
                          dd=rasta3*delta3+dis(0,0,0,r-r1aw[h]);
                          if(delta3>=2 && delta3<pi){
                              dd=r+r1aw[h];
                          }
                          if(dd<mind){
                              br2aw++;
                              break;
                          }
                      }//
                  }//next h
              }
              if(br2aw==0){
                g.drawLine(xI,(int)yr,xI,(int)yr);
              }
            }
          }//next xI
        }//next ysyoki
      }//l
    }//k

//y方向で描画
    for(kaw=1;kaw<=Naw;kaw++){
      th1aw[kaw-1]=arccosaw((x1aw[kaw-1]-cx)/r1aw[kaw-1]);
      if(y1aw[kaw-1]>cy){
           th1aw[kaw-1]=2*pi-arccosaw((x1aw[kaw-1]-cx)/r1aw[kaw-1]);
      }
    }
    for(k=0;k<Naw-1;k++){
      for(l=k+1;l<Naw;l++){
        for(xsyoki=(x1aw[k]+x1aw[l])/2.0-100.0;xsyoki<(x1aw[k]+x1aw[l])/2.0+100.0+1;xsyoki=xsyoki+100.0){
          for(yI=0;yI<=takaaw;yI++){
            xr=xsyoki;
            xr1=-100;
            ff=100;
            cou=0;
            while(dis(ff,0,0,0)>eps && cou<coumax){
              xr1=xr;
              r=dis(xr,yI,cx,cy);
              theta=arccosaw((xr-cx)/r);
              if(yI>cy){
                  theta=2*pi-arccosaw((xr-cx)/r);
              }
              delta=dis(0,0,0,theta-th1aw[k]);
              if(2*pi-dis(0,0,0,theta-th1aw[k])<dis(0,0,0,theta-th1aw[k])){
                  delta=2*pi-dis(0,0,0,theta-th1aw[k]);
              }
              rasta=r;
              if(r1aw[k]<r){
                  rasta=r1aw[k];
              }
              kou1=rasta*delta+dis(0,0,0,r-r1aw[k]);
              if(delta>=2 && delta<pi){
                  kou1=r+r1aw[k];
              }

              delta2=dis(0,0,0,theta-th1aw[l]);
              if(2*pi-dis(0,0,0,theta-th1aw[l])<dis(0,0,0,theta-th1aw[l])){
                  delta2=2*pi-dis(0,0,0,theta-th1aw[l]);
              }
              rasta2=r;
              if(r1aw[l]<r){
                  rasta2=r1aw[l];
              }
              kou4=rasta2*delta2+dis(0,0,0,r-r1aw[l]);
              if(delta2>=2 && delta2<pi){
                  kou4=r+r1aw[l];
              }

              ff=kou1-kou4;

              thetab=-((r-(xr-cx)*(xr-cx)/r)/(r*r))/jouaw(1-jouaw((xr-cx)/r,2),0.5);
              if(yI>cy){
                  thetab=((r-(xr-cx)*(xr-cx)/r)/(r*r))/jouaw(1-jouaw((xr-cx)/r,2),0.5);
              }
              deltab=thetab;
              if(theta<th1aw[k]){
                  deltab=-thetab;
              }
              if(2*pi-dis(0,0,0,theta-th1aw[k])<dis(0,0,0,theta-th1aw[k])){
                  deltab=-thetab;
                  if(theta<th1aw[k]){
                      deltab=thetab;
                  }
              }
              rastab=(xr-cx)/r;
              if(r1aw[k]<r){
                  rastab=0;
              }
              kou1b=rastab*delta+rasta*deltab+(xr-cx)/r;
              if(r1aw[k]>r){
                  kou1b=rastab*delta+rasta*deltab-(xr-cx)/r;
              }
              if(delta>=2 && delta<pi){
                  kou1b=(xr-cx)/r;
              }

              theta2b=-((r-(xr-cx)*(xr-cx)/r)/(r*r))/jouaw(1-jouaw((xr-cx)/r,2),0.5);
              if(yI>cy){
                  theta2b=((r-(xr-cx)*(xr-cx)/r)/(r*r))/jouaw(1-jouaw((xr-cx)/r,2),0.5);
              }
              delta2b=theta2b;
              if(theta<th1aw[l]){
                  delta2b=-theta2b;
              }
              if(2*pi-dis(0,0,0,theta-th1aw[l])<dis(0,0,0,theta-th1aw[l])){
                  delta2b=-theta2b;
                  if(theta<th1aw[l]){
                      delta2b=theta2b;
                  }
              }
              rasta2b=(xr-cx)/r;
              if(r1aw[l]<r){
                  rasta2b=0;
              }
              kou4b=rasta2b*delta2+rasta2*delta2b+(xr-cx)/r;
              if(r1aw[l]>r){
                  kou4b=rasta2b*delta2+rasta2*delta2b-(xr-cx)/r;
              }
              if(delta2>=2 && delta2<pi){
                  kou4b=(xr-cx)/r;
              }

              ffbi=kou1b-kou4b;
              xr=xr-ff/ffbi;
              cou++;
            }//wend
            if(dis(ff,0,0,0)<eps){
              br2aw=0;
              if(kou1/kou4>1.0+eps2 || kou4/kou1>1.0+eps2){
                  br2aw=100;
              }
              if(br2aw==0){
                  mind=kou1;
                  for(h=0;h<Naw;h++){
                      if(h!=k && h!=l){
                          delta3=dis(0,0,0,theta-th1aw[h]);
                          if(2*pi-dis(0,0,0,theta-th1aw[h])<dis(0,0,0,theta-th1aw[h])){
                              delta3=2*pi-dis(0,0,0,theta-th1aw[h]);
                          }
                          rasta3=r;
                          if(r1aw[h]<r){
                              rasta3=r1aw[h];
                          }
                          dd=rasta3*delta3+dis(0,0,0,r-r1aw[h]);
                          if(delta3>=2 && delta3<pi){
                              dd=r+r1aw[h];
                          }
                          if(dd<mind){
                              br2aw++;
                              break;
                          }
                      }//
                  }//next h
              }
              if(br2aw==0){
                  g.drawLine((int)xr,yI,(int)xr,yI);
              }
            }
          }//next xI
        }//next ysyoki
      }//next l
    }//next k



    g.drawString("N="+Naw,15,15);
  }
}