import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
public class pwvoro extends java.applet.Applet{
  Color col1,col2,col3;
  int Npw;
  int takapw,habapw;
  int kpw,ipw,jpw,lpw,upw,k2pw,xzpw,xz2pw,yzpw,yz2pw;
  double eipw,ejpw,bepw,cpw,apw,bpw,dipw,yspw,tpw;
  double x0pw,y0pw,yypw,xa1pw,ya1pw;
  double kxpw[]=new double[100];
  double kypw[]=new double[100];
  double kzpw[]=new double[100];
  double ekpw,be2pw,c2pw,a2pw,b2pw,di3pw,ys3pw,t2pw;
  double y20pw,y21pw,sa0pw,sa1pw,xxpw,dspw,uspw;
  int br2pw=0;
  String NS,habaS,takaS;
  double Nd,takad,habad;
  public double dou(String dous){
    double dou1;
    dou1 = (Double.valueOf(dous)).doubleValue();
    return dou1;
  }
  public double randpw(){
    double rand1pw;
    rand1pw=Math.random();
    return rand1pw;
  }
  public void init(){
    col1=Color.black;
    col2=Color.yellow;
    col3=Color.white;
    takaS=getParameter("takap");
    habaS=getParameter("habap");
    NS=getParameter("Np");
    habad=dou(habaS);
    takad=dou(takaS);
    Nd=dou(NS);
    if(Nd==10){
      Nd=4+46*randpw();
    }
    habapw=(int)habad;
    takapw=(int)takad;
    Npw=(int)Nd;
  }
  double x1pw[]=new double[100];
  double y1pw[]=new double[100];
  double w1pw[]=new double[100];
  int xpw[]=new int[100];
  int ypw[]=new int[100];
  int wpw[]=new int[100];
  double spw[]=new double[100];
  String ssspw[]=new String[100];
  public double joupw(double aaapw,double bbbpw){
    double jou1pw;
    jou1pw=Math.pow(aaapw,bbbpw);
    return jou1pw;
  }
  void heappw(double he1pw[],double he2pw[],double he3pw[],int NNpw){
    int kkpw,kkspw,iipw,jjpw,mmpw;
    double b1pw,b2pw,b3pw,c1pw,c2pw,c3pw;
    kkspw=(int)(NNpw/2);
    for(kkpw=kkspw;kkpw>=1;kkpw--){
      iipw=kkpw;
      b1pw=he1pw[iipw-1];b2pw=he2pw[iipw-1];b3pw=he3pw[iipw-1];
      while(2*iipw<=NNpw){
        jjpw=2*iipw;
        if(jjpw+1<=NNpw){
          if(he1pw[jjpw-1]<he1pw[jjpw]){
            jjpw++;
          }
        }
        if(he1pw[jjpw-1]<=b1pw){
          break;
        }
        he1pw[iipw-1]=he1pw[jjpw-1];he2pw[iipw-1]=he2pw[jjpw-1];he3pw[iipw-1]=he3pw[jjpw-1];
        iipw=jjpw;
      }//wend
      he1pw[iipw-1]=b1pw;he2pw[iipw-1]=b2pw;he3pw[iipw-1]=b3pw;
    }//next kk
    for(mmpw=NNpw-1;mmpw>=1;mmpw--){
      c1pw=he1pw[mmpw];c2pw=he2pw[mmpw];c3pw=he3pw[mmpw];
      he1pw[mmpw]=he1pw[0];he2pw[mmpw]=he2pw[0];he3pw[mmpw]=he3pw[0];
      iipw=1;
      while(2*iipw<=mmpw){
        kkpw=2*iipw;
        if(kkpw+1<=mmpw){
          if(he1pw[kkpw-1]<=he1pw[kkpw]){
            kkpw++;
          }
        }
        if(he1pw[kkpw-1]<=c1pw){
          break;
        }
        he1pw[iipw-1]=he1pw[kkpw-1];he2pw[iipw-1]=he2pw[kkpw-1];he3pw[iipw-1]=he3pw[kkpw-1];
        iipw=kkpw;
      }//wend
      he1pw[iipw-1]=c1pw;he2pw[iipw-1]=c2pw;he3pw[iipw-1]=c3pw;
    }//next mm
  }
  public void paint(java.awt.Graphics g){
    g.setColor(col1);
    g.fillRect(1,1,habapw,takapw);
    g.setColor(col2);
    g.drawString("N="+Npw,15,15);
    for(kpw=1;kpw<=Npw;kpw++){
      x1pw[kpw-1]=randpw()*(habapw-30)+15;
      y1pw[kpw-1]=randpw()*(takapw-30)+15;
      w1pw[kpw-1]=randpw()*10000+1;
      xpw[kpw-1]=(int)x1pw[kpw-1];
      ypw[kpw-1]=(int)y1pw[kpw-1];
      wpw[kpw-1]=(int)w1pw[kpw-1];
      ssspw[kpw-1]=""+wpw[kpw-1];
      g.drawString(ssspw[kpw-1],xpw[kpw-1]-3,ypw[kpw-1]-3);
      g.fillOval(xpw[kpw-1]-2,ypw[kpw-1]-2,4,4);
    }
    g.drawLine(habapw-150,10,habapw-50,10);
    g.drawLine(habapw-150,5,habapw-150,15);
    g.drawLine(habapw-100,5,habapw-100,10);
    g.drawLine(habapw-50,5,habapw-50,15);
    g.drawString("0",habapw-158,13);
    g.drawString("100",habapw-48,13);
    heappw(w1pw,x1pw,y1pw,Npw);
    g.setColor(col3);
    for(ipw=1;ipw<=Npw-1;ipw++){
      for(jpw=ipw+1;jpw<=Npw;jpw++){
        eipw=joupw(x1pw[ipw-1],2)+joupw(y1pw[ipw-1],2);
        ejpw=joupw(x1pw[jpw-1],2)+joupw(y1pw[jpw-1],2);
        bepw=w1pw[jpw-1]-w1pw[ipw-1];
        cpw=0.5*(ejpw-eipw-bepw);
        apw=x1pw[jpw-1]-x1pw[ipw-1];
        bpw=y1pw[jpw-1]-y1pw[ipw-1];
        dipw=-apw/bpw;
        yspw=cpw/bpw;
        tpw=joupw(x1pw[ipw-1]-x1pw[jpw-1],2)+joupw(y1pw[ipw-1]-y1pw[jpw-1],2);
        if(yspw>0 && yspw<takapw){
          x0pw=0;y0pw=yspw;
        }
        else{
          if(dipw>0){
            x0pw=-yspw/dipw;y0pw=0;
          }
          else{
            x0pw=(takapw-yspw)/dipw;
            y0pw=takapw;
          }
        }
        yypw=dipw*habapw+yspw;
        if(yypw>0 && yypw<takapw){
          xa1pw=habapw;ya1pw=yypw;
        }
        else{
          if(dipw>0){
            xa1pw=(takapw-yspw)/dipw;ya1pw=takapw;
          }
          else{
            xa1pw=-yspw/dipw;
            ya1pw=0;
          }
        }
        lpw=1;
        kxpw[lpw-1]=x0pw;kypw[lpw-1]=y0pw;
        for(kpw=1;kpw<=Npw;kpw++){
          if(kpw!=ipw && kpw!=jpw){
            ekpw=joupw(x1pw[kpw-1],2)+joupw(y1pw[kpw-1],2);
            be2pw=w1pw[kpw-1]-w1pw[ipw-1];
            c2pw=0.5*(ekpw-eipw-be2pw);
            a2pw=x1pw[kpw-1]-x1pw[ipw-1];
            b2pw=y1pw[kpw-1]-y1pw[ipw-1];
            di3pw=-a2pw/b2pw;
            ys3pw=c2pw/b2pw;
            t2pw=joupw(x1pw[ipw-1]-x1pw[kpw-1],2)+joupw(y1pw[ipw-1]-y1pw[kpw-1],2);
            y20pw=di3pw*x0pw+ys3pw;
            y21pw=di3pw*xa1pw+ys3pw;
            sa0pw=y0pw-y20pw;
            sa1pw=ya1pw-y21pw;
            if(sa0pw*sa1pw<=0){
              lpw++;
              kxpw[lpw-1]=(ys3pw-yspw)/(dipw-di3pw);
              kypw[lpw-1]=dipw*kxpw[lpw-1]+yspw;
            }
          }//if(k!=i && k!=j)
        }//next k
        lpw++;
        kxpw[lpw-1]=xa1pw;
        kypw[lpw-1]=ya1pw;
        for(upw=1;upw<=lpw;upw++){
          kzpw[upw-1]=0;
        }
        heappw(kxpw,kypw,kzpw,lpw);
        for(kpw=1;kpw<=lpw-1;kpw++){
          k2pw=kpw+1;
          xxpw=(kxpw[kpw-1]+kxpw[k2pw-1])/2;
          yypw=dipw*xxpw+yspw;
          dspw=joupw(xxpw-x1pw[ipw-1],2)+joupw(yypw-y1pw[ipw-1],2)-w1pw[ipw-1];
          for(upw=1;upw<=Npw;upw++){
            if(upw!=ipw && upw!=jpw){
              uspw=joupw(xxpw-x1pw[upw-1],2)+joupw(yypw-y1pw[upw-1],2)-w1pw[upw-1];
              if(uspw<dspw){
                br2pw=1;
                break;
              }
            }
          }//next u
          if(br2pw==0){
            xzpw=(int)(kxpw[kpw-1]+0.5);
            xz2pw=(int)(kxpw[k2pw-1]+0.5);
            yzpw=(int)(kypw[kpw-1]+0.5);
            yz2pw=(int)(kypw[k2pw-1]+0.5);
            g.drawLine(xzpw,yzpw,xz2pw,yz2pw);
          }//if br2==0
          else{//if br2==1
            br2pw=0;
          }
        }//next k
      }//next jpw
    }//next ipw
  }
}