function retval=simplex(a)
[n,m]=size(A);
## n line m column
m1=m-1; ## 
n1=n-1;
m2=m1+n1;
m3=m2+1;
keyrow=0;
keycolumn=0;
keynumber=0.0;
ratio=1.0;
b=zeros(n,m3);
d=zeros(m,1)
s=zeros(m,1);

      for(int i=0;i<n;i++)
      { b[i][m2]=a[i][m1]; }
       for(int i=0;i<n;i++)
       {for(int j=0;j<m-1;j++) {b[i][j]=a[i][j];}   }
      for(int i=0;i<n-1;i++)
        {for(int j=m1;j<m2;j++) {if(i==(j-m1)) b[i+1][j]=1.0;}}
              
      double max;
      double min;
      System.out.println(Matrix.toString(b));
      for(int k=0;k<n1;k++)
      {
	  int mm=0;
	  for(int j=0;j<m1;j++)
      {if(b[0][j]<0) mm++;}
      if(mm==0) break; 
	  max=-9.999e30;
      min=9.999e30; 
      for(int j=0;j<m1;j++)
      {if( (b[0][j]<0) && Math.abs(b[0][j])>max) {max=Math.abs(b[0][j]);keycolumn=j;}} 
      for(int i=1;i<n;i++)
      { ratio=b[i][m2]/b[i][keycolumn];
        if(ratio<min)  {min=ratio;keyrow=i;}
      }
      keynumber=b[keyrow][keycolumn]; 
      double c[][]=new double[n][m3];
      for(int i=0;i<n;i++)
      { for(int j=0;j<m3;j++) {c[i][j]=b[i][j];}} 
      for(int i=0;i<n;i++)
      { if(i!=keyrow) {for(int j=0;j<m3;j++) {b[i][j]=c[i][j]-c[keyrow][j]*c[i][keycolumn]/keynumber;}} 
        else {for(int j=0;j<m3;j++) {b[i][j]=c[i][j]/keynumber;}} 
      }
      System.out.println("keynumber = "+keynumber);
      System.out.println("keyrow = "+keyrow+" keycolumn = "+keycolumn);	  
      System.out.println(Matrix.toString(b));
      }

      d[m1]=b[0][m2];
      s[m1]="y=f(x)";
      for(int j=0;j<m1;j++) 
          { s[j]="x["+j+"]";}
      for(int i=1;i<n;i++)
      {
          for(int j=0;j<m1;j++) 
          {    
	              if((b[i][j]==1.0)&& (b[0][j]==0.0)) 
                  { d[j]=b[i][m2];}              	              
          }
	      
      }
      Text.print(d,s,"Simplex algorithm");
      return d;
      }