import java.io.*;
import java.util.*;
import java.net.*;
//_____________________________________________________________
public class amino
{ 
   double[] w = new double[20];
   double[] t = new double[9];
   int[] l = new int[9];
   Random rand = new Random();
   
//_____________________________________________________________
public static final void main(String[] args) throws Exception
{
   amino bnk = new amino();
   bnk.all(37,73,"GPP");
   bnk.all(25,52,"SPP");
   bnk.start(args);
}
//_____________________________________________________________
amino()
{
}
//___________________________________________________________________________
void start(String[] args)
{
   int num = 10;
   if (args.length > 0) num = Integer.parseInt(args[0]);
   long t1 = System.nanoTime();
   make(true);
   if(look()) System.out.println("GPP FOUND");
   boolean ok = false;
   int cnt2 = 0;
   for (int i = 0; i < num; i++)
   {
      if (cnt2++ > 1000000)
      {
         System.out.print(".");
         cnt2 = 0;
      }
      make(false);
      mix(1000,i);
      if (look())
      {
         System.out.println("FOUND " + i);
         ok = true;
      }
   }
   if (!ok) System.out.println("NOT FOUND");
   long t2 = System.nanoTime();
   System.out.println("seconds = " + ((t2-t1)/1e9));
}
//___________________________________________________________________________
boolean look()
{
   for (int i = 0; i < t.length; i++)
   {
      t[i] = 0;
   }
   for (int i = 0; i < w.length; i++)
   {
      t[0] += w[i];
   }
   for (int i = 0; i < w.length; i+= 4)
   {
      t[1] += w[i] + w[i+3];
      t[2] += w[i+1] + w[i+2];
      t[3] += w[i] + w[i+2];
      t[4] += w[i+1] + w[i+3];
   }
   t[5] = w[1] + w[3] + w[4] + w[6] + w[9] + w[11] + w[12] + w[14] + w[17] + w[19];
   t[6] = w[0] + w[2] + w[5] + w[7] + w[8] + w[10] + w[13] + w[15] + w[16] + w[18];
   double a = w[0] + w[1] + w[2] + w[3];
   double b = w[4] + w[5] + w[6] + w[7];
   double c = w[8] + w[9] + w[10] + w[11];
   double d = w[12] + w[13] + w[14] + w[15];
   double e = w[16] + w[17] + w[18] + w[19];
   t[7] = a + b + c/2;
   t[8] = d + e + c/2;
   double[] tt = new double[t.length];
   int[] tt2 = new int[tt.length];
   int cnt = 0;
   for (int i = 0; i < t.length; i++)
   {
      tt[i] = (double)((int)((t[i]+ 0.0000001) * 1000) / 1000.0);
      tt2[i] = (int)(((tt[i] * 1000) - ((int)tt[i] * 1000)) * 1);
      boolean found = false;
      if (tt2[i] == l[i]) cnt++;
   }
   if (cnt >= 8) 
   {
      for (int i = 0; i < tt.length; i++)
      {
         System.out.println(tt[i] + " " + tt2[i]);
      }
      return(true); 
   }
   else return(false);
}
//___________________________________________________________________________
void mix(int count, int seed)
{
   rand = new Random(seed);
   
   for (int i = 0; i < count; i++)
   {
      int a = rand.nextInt(20);
      int b = rand.nextInt(20);
      double tmp = w[a];
      w[a] = w[b];
      w[b] = tmp;
   }
}
//___________________________________________________________________________
void make(boolean gpp)
{
   w[0] = 133.10; //aspartate 70
   w[1] = 132.12; //asparagine 70
   w[2] = 89.09; //alanine 48
   w[3] = 131.17; //leucine 62
   w[4] = 174.20; //arginine 94
   w[5] = 165.19; //phenylalanine 88
   w[6] = 115.13; //proline 62
   w[7] = 131.17; //isoleucine 72
   w[8] = 146.19; //lysine 80
   w[9] = 181.19; //tyrosine 96
   w[10] = 119.12; //threonine 64
   w[11] = 149.21; //methionine 80
   w[12] = 155.15; //histidine 82
   w[13] = 204.23; //tryptophan 108
   w[14] = 105.09; //serine 56
   w[15] = 121.16; //cysteine 64
   w[16] = 147.13; //glutamate 78
   w[17] = 146.14; //glutamine 78
   w[18] = 75.07; //glycine 40
   w[19] = 117.15; //valine 64
 
   if (gpp)
   {
      l[1] = 630;
      l[2] = 370;
      l[3] = 270;
      l[4] = 730;
      l[5] = 550;
      l[6] = 450;
      l[7] = 25;
      l[8] = 975;
   }
   else

   {
      l[1] = 750;
      l[2] = 250;
      l[3] = 480;
      l[4] = 520;
      l[5] = 385;
      l[6] = 615;
      l[7] = 25;
      l[8] = 975;
   }
}
//___________________________________________________________________________
void all(int x, int y, String s)
{
   int max = 2738;
   
   int cnt = 0;
   for (int i = 0; i < 100; i++)
   {
      for (int j = 0; j < 100; j++)
      {
         if (((x * i) + (y * j)) == max)
         {
            System.out.println(s + " " + i + " " + j);
         }
      }
   }
}
}//__________________________________________________________________________
