#include <iostream.h>
#include "rational.cpp"

rational dwop (int oum,rational ax,rational bx) {
  if (oum==0) return(ax+bx);
  if (oum==1) return(ax-bx);
  if (oum==2) return(ax*bx);
  if (oum==3) return(ax/bx);
}

void main (void) {
  rational ans;
  rational l[4];
  int ord[4] = {0,1,2,3};
  int p[24][4] = {
    {0,3,1,2}, {0,3,2,1}, {0,1,3,2}, {0,2,3,1}, {0,1,2,3}, {0,2,1,3},
    {1,3,0,2}, {1,3,2,0}, {1,0,3,2}, {1,2,3,0}, {1,0,2,3}, {1,2,0,3},
    {2,3,0,1}, {2,3,1,0}, {2,0,3,1}, {2,1,3,0}, {2,0,1,3}, {2,1,0,3},
    {3,2,0,1}, {3,2,1,0}, {3,0,2,1}, {3,1,2,0}, {3,0,1,2}, {3,1,0,2}} ;

  l[0] = 1; l[1] = 4; l[2] = 9; l[3] = 16;

  for (int a=0;a<24;a++) for (int b=0;b<5;b++)
   for (int c=0;c<4;c++)
   for (int d=0;d<4;d++)
   for (int e=0;e<4;e++) {
     switch (b) {
       case 0: cout << 
         dwop(e,dwop(d,dwop(c,l[p[a][0]],l[p[a][1]]),l[p[a][2]]),l[p[a][3]]);
         cout << "\n"; break;
       case 1: cout << 
         dwop(e,dwop(c,l[p[a][0]],dwop(d,l[p[a][1]],l[p[a][2]])),l[p[a][3]]);
         cout << "\n"; break;
       case 2: cout << 
         dwop(d,dwop(c,l[p[a][0]],l[p[a][1]]),dwop(e,l[p[a][2]],l[p[a][3]]));
         cout << "\n"; break;
       case 3: cout << 
         dwop(c,l[p[a][0]],dwop(e,dwop(d,l[p[a][1]],l[p[a][2]]),l[p[a][3]]));
         cout << "\n"; break;
       case 4: cout << 
         dwop(c,l[p[a][0]],dwop(d,l[p[a][1]],dwop(e,l[p[a][2]],l[p[a][3]])));
         cout << "\n"; break;
     }
  }
}


