import java.awt.*;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
public class mm2 extends Applet implements Runnable{
  Thread th;
  int ksm=1;
  int aruku=20,td=4000;
  int x3,x4,xaru,y1=30,y2,y22,y3,yaru;
  double y21;
  int mati=0,ma,se1=0,se2=0,sf1,sf2;
  int km,co1=0,co2=0,tlimit=14;
  double l1,l2,l3;
  double t1=0,t2m=0,t3m=0,tm=0,mean=0,tis=0,matit=0;
  int tI;
  int Nm=18,eN=10;
  double x1m;
  int xm,xt1,xt2,yt1,yt2;
  double wtd[]=new double[Nm];
  double mwtd=0;
  String wtS="",mwtS="";
  String la,mu1,mu2,NS,meanS,tisS;
  String laS,mu1S,mu2S,co1S,co2S;
  public void start(){
    if(th==null){
      th=new Thread(this);
      th.start();
    }
  }
  public double dou(String dous){
    double dou1;
    dou1 = (Double.valueOf(dous)).doubleValue();
    return dou1;
  }
  public double randm(){
    double rand1m;
    rand1m=Math.random();
    return rand1m;
  }
  public double rog(double aa){
    double rog1;
    rog1=Math.log(aa);
    return rog1;
  }
  String imgS;
  String img[]=new String[eN];
  String img2[]=new String[Nm];
  int eee;
  Color col1,col2,col3;
  Font fon1,fon2;
  public void init(){
    col1=Color.black;
    col2=Color.white;
    col3=Color.yellow;
    fon1=new Font("Helvetica",Font.ITALIC,30);
    fon2=new Font("Courier",Font.PLAIN,12);
    laS=getParameter("lambda");
    mu1S=getParameter("mu");
    mu2S=getParameter("mu2");
    for(eee=0;eee<eN;eee++){
      img[eee]=""+eee;
    }
  }
  //y2=img2[0]のy座標
  //y3=img2[1]のy座標
  //se1=1 上のサーバーに客がいる。
  //se1=0 上のサーバーに客がいない。
  //se2=1 下のサーバーに客がいる。
  //se2=0 下のサーバーに客がいない。
  //sf1=1 上の客はimg2[0]
  //sf1=2 上の客はimg2[1]
  //sf2=1 下の客はimg2[0]
  //sf2=2 下の客はimg2[1]
  public void run(){
    l1=dou(laS);
    l2=dou(mu1S);
    l3=dou(mu2S);
    if(l1==999){
      l1=0.1+randm()*9.9;
    }
    if(l2==999){
      l2=0.1+randm()*9.9;
    }
    if(l3==999){
      l3=0.1+randm()*9.9;
    }
    la="lambda="+l1;
    mu1="mu1="+l2;
    mu2="mu2="+l3;
    NS="N="+(Nm-1);
    for(;;){
      xt1=(int)(tis*(700/tlimit)+30);
      t1=t1-tm;
      if(t1<=0){
        t1=-rog(randm())/l1;
      }
      t2m=t2m-tm;
      if(t2m<=0){
        t2m=-rog(randm())/l2;
      }
      t3m=t3m-tm;
      if(t3m<=0){
        t3m=-rog(randm())/l3;
      }
      if(t1<t2m && t1<t3m){
        tm=t1;ksm=1;
      }
      else{//t1>t2m || t1>t3m
        if(t2m<t3m){
          tm=t2m;ksm=2;
        }
        else{
          tm=t3m;ksm=3;
        }
        if(mati==1){
          if(se1==1){
            tm=t2m;ksm=2;
          }//se1==1
          else{//se2==1
            tm=t3m;ksm=3;
          }
        }//if mati==1
      }//if t1>t2m ||t1>t3m
      if(mati<=0){
        tm=t1;ksm=1;
      }
      if(mati>=Nm-1){
        if(t2m<t3m){
          tm=t2m;ksm=2;
        }
        else{
          tm=t3m;ksm=3;
        }
      }//mati>=Nm-1
      tI=(int)(tm*td);
      try{
        th.sleep(tI);
      }
      catch (InterruptedException e){}
      tis=tis+tm;
      matit=matit+mati*tm;
      mean=matit/tis;
      tisS="time="+(tis);
      meanS="E[L]="+mean;
      xt2=(int)(tis*(700/tlimit)+30);
      if(ksm==1){
        x1m=randm();
        xm=(int)(eN*x1m);
        imgS=img[xm];
        if(mati<=1){
          yaru=y1;
          yt1=290-10*mati;
          yt2=290-10*(mati+1);
          for(x3=10;x3<=520;x3=x3+30){
            xaru=x3;
            repaint();
            try{
              th.sleep(aruku);
            }
            catch (InterruptedException e){}
          }//next x3
          if(mati==0){
            y21=2*randm();y22=(int)y21;y2=60-60*y22;
            xaru=550;
            yaru=y2;
            repaint();
            if(y2==0){
              se1=1;
              sf1=1;sf2=2;y3=60;
            }//if y2==0
            else{//if y2==60
              se2=1;
              sf1=2;sf2=1;y3=0;
            }//if y2==60
          }//if(mati==0)
          else{//if mati==1
            xaru=550;
            yaru=y3;
            repaint();
            if(y3==0){
              se1=1;
            }
            else{//if y3==60
              se2=1;
            }
          }//if mati==1
        }//if mati<=1
        else{//if mati>=2
          yaru=y1;
          yt1=290-10*mati;
          yt2=290-10*(mati+1);
          for(x3=10;x3<=550-(mati-1)*30;x3=x3+30){
            xaru=x3;
            repaint();
            try{
              th.sleep(aruku);
            }
            catch (InterruptedException e){}
          }//next x3
        }//if(mati>=2
        for(km=0;km<mati;km++){
          wtd[km]=wtd[km]+tm;
        }
        wtd[mati]=0;
        mati++;
        img2[mati-1]=imgS;        
      }//ksm==1
      else{//ksm==2 || ksm==3
        if(ksm==2){
          yt1=290-10*mati;
          yt2=290-10*(mati-1);
          if(sf1==1){
            imgS=img2[0];
            wtd[0]=wtd[0]+tm;
            wtS="W="+wtd[0];
            mwtd=((mwtd*(co1+co2))+wtd[0])/(co1+co2+1);
            mwtS="E[W]="+mwtd;
            mati--;
            for(km=1;km<=mati;km++){
              img2[km-1]=img2[km];
              wtd[km-1]=wtd[km]+tm;
            }
            img2[mati]=null;
            wtd[mati]=0;
            if(mati==0){
              se1=0;
            }//if mati==0
            if(mati==1){
              se1=0;
              sf1=2;sf2=1;y2=60;y3=0;
            }//if mati==1
            if(mati>=2){
              sf1=2;sf2=1;y2=60;y3=0;
            }//if mati>=2
            yaru=0;
            for(x4=580;x4<730;x4=x4+30){
              xaru=x4;
              repaint();
              try{
                th.sleep(aruku);
              }
              catch (InterruptedException e){}
            }//next x4
          }//if(sf1==1
          else{//if(sf1==2)
            imgS=img2[1];
            wtd[1]=wtd[1]+tm;
            wtS="W="+wtd[1];
            mwtd=((mwtd*(co1+co2))+wtd[1])/(co1+co2+1);
            mwtS="E[W]="+mwtd;
            mati--;
            wtd[0]=wtd[0]+tm;
            for(km=2;km<=mati;km++){
              img2[km-1]=img2[km];
              wtd[km-1]=wtd[km]+tm;
            }
            img2[mati]=null;
            wtd[mati]=0;
            if(mati==1){
              se1=0;
            }
            yaru=0;
            for(x4=580;x4<730;x4=x4+30){
              xaru=x4;
              repaint();
              try{
                th.sleep(aruku);
              }
              catch (InterruptedException e){}
            }//next x4
          }//if(sf1==2
          co1++;
          co1S=""+co1;
          repaint();
        }//if ksm==2
        else{//if(ksm==3)
          yt1=290-10*mati;
          yt2=290-10*(mati-1);
          if(sf2==1){
            imgS=img2[0];
            wtd[0]=wtd[0]+tm;
            wtS="W="+wtd[0];
            mwtd=((mwtd*(co1+co2))+wtd[0])/(co1+co2+1);
            mwtS="E[W]="+mwtd;
            mati--;
            for(km=1;km<=mati;km++){
              img2[km-1]=img2[km];
              wtd[km-1]=wtd[km]+tm;
            }
            img2[mati]=null;
            wtd[mati]=0;
            if(mati==0){
              se2=0;
            }//if mati==0
            if(mati==1){
              se2=0;
              sf1=1;sf2=2;y2=0;y3=60;
            }
            if(mati>=2){
              sf1=1;sf2=2;y2=0;y3=60;
            }//if mati>=2
            yaru=60;
            for(x4=580;x4<730;x4=x4+30){
              xaru=x4;
              repaint();
              try{
                th.sleep(aruku);
              }
              catch (InterruptedException e){}
            }
          }//if sf2==1
          else{//if(sf2==2)
            imgS=img2[1];
            wtd[1]=wtd[1]+tm;
            wtS="W="+wtd[1];
            mwtd=((mwtd*(co1+co2))+wtd[1])/(co1+co2+1);
            mwtS="E[W]="+mwtd;
            mati--;
            wtd[0]=wtd[0]+tm;
            for(km=2;km<=mati;km++){
              img2[km-1]=img2[km];
              wtd[km-1]=wtd[km]+tm;
            }
            img2[mati]=null;
            wtd[mati]=0;
            if(mati==1){
              se2=0;
            }
            yaru=60;
            for(x4=580;x4<730;x4=x4+30){
              xaru=x4;
              repaint();
              try{
                th.sleep(aruku);
              }
              catch (InterruptedException e){}
            }//next x4
          }//if sf2==2
          co2++;
          co2S=""+co2;
          repaint();
        }//if ksm==3
      }//if ksm==2 || ksm==3
    }//next(;;)
  }
  public void update(Graphics g){
    paint(g);
  }
  public void paint(java.awt.Graphics g){
    if(xt1==30){
      g.setColor(col1);
      g.fillRect(1,1,700,320);
      g.setColor(col2);
      g.drawLine(30,291,700,291);
      g.drawLine(30,121,700,121);
      for(eee=0;eee<=6;eee++){
        g.drawLine(30+100*eee,292,30+100*eee,298);
      }
      for(eee=1;eee<=5;eee++){
        g.drawString(""+(eee*tlimit/7),24+eee*100,310);
      }
      g.drawString("time=0",20,308);
      g.drawString("time="+(tlimit-tlimit/7),620,308);
      g.drawLine(29,290,29,100);
      for(eee=0;eee<=Nm-1;eee++){
        g.drawLine(29,290-10*eee,22,290-10*eee);
      }
      g.drawString("0",10,294);
      g.drawString("10",5,194);
      g.drawLine(30,191,700,191);
      g.setFont(fon2);
      g.setColor(col2);
      g.drawLine(1,29,520,29);
      g.drawLine(1,91,520,91);
      g.drawString(la,1,104);
      g.drawString(mu1,201,89);
      g.drawString(mu2,201,104);
      g.drawString(NS,1,89);
      for(eee=4;eee<=Nm-1;eee++){
        g.drawString(""+eee,615-30*eee,20);
      }
      g.setFont(fon1);
      g.drawString("*",550,60);
      g.drawString("*",550,120);
    }
    g.setColor(col1);
    g.fillRect(1,104,550,14);
    g.fillRect(400,93,150,12);
    g.fillRect(590,43,100,14);
    g.fillRect(590,102,100,14);
    g.setFont(fon2);
    g.setColor(col2);
    g.drawLine(582,0,582,30);
    g.drawLine(582,60,582,90);
    g.drawString(wtS,401,104);
    g.drawString(tisS,1,116);
    g.drawString(meanS,201,116);
    g.drawString(mwtS,401,116);
    g.drawString(co1S,591,56);
    g.drawString(co2S,591,115);
    g.setFont(fon1);
    if(mati>=1){
      g.setColor(col3);
      g.drawString(img2[0],550,y2+30);
      if(mati>=2){
        g.drawString(img2[1],550,y3+30);
        if(mati>=3){
          g.setColor(col1);
          g.fillRect(580-2*30,30,30,30);
          for(ma=3;ma<=mati;ma++){
            g.setColor(col3);
            g.drawString(img2[ma-1],610-ma*30,y1+30);
            g.setColor(col1);
            g.fillRect(580-ma*30,30,30,30);
          }
        }//if(mati>=3
      }//if mati>=2
    }//if mati>=1
    if(mati<=2){
      g.setColor(col1);
      g.fillRect(490,30,60,30);
    }
    g.setColor(col3);
    g.drawString(imgS,xaru,yaru+30);
    g.setColor(col1);
    g.fillRect(xaru-30,yaru,30,30);
    g.setColor(col3);
    if(tis<tlimit+1){
      g.drawLine(xt1,yt1,xt2,yt1);
      g.drawLine(xt2,yt1,xt2,yt2);
    }
  }
  public void stop(){
    if(th!=null){
      th.stop();
      th=null;
    }
  }
}

