/* Generated from ../../../git/cloog/test/vivien.cloog by CLooG 0.14.0-76-gef19709 gmp bits in 0.78s. */
extern void hash(int);

/* Useful macros. */
#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d))
#define ceild(n,d)  (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d))
#define max(x,y)    ((x) > (y) ? (x) : (y))
#define min(x,y)    ((x) < (y) ? (x) : (y))

#define S1(i) { hash(1); hash(i); }
#define S2(i,j) { hash(2); hash(i); hash(j); }
#define S3(i) { hash(3); hash(i); }
#define S4(i,j) { hash(4); hash(i); hash(j); }
#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); }
#define S6(i,j) { hash(6); hash(i); hash(j); }

void test(int n)
{
  /* Scattering iterators. */
  int p1, p2, p3;
  /* Original iterators. */
  int i, j, k;
  for (p1=-54*n+4;p1<=min(4,4*n+1);p1++) {
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
  }
  if (n >= 1) {
    S3(1) ;
  }
  if (n >= 2) {
    S4(1,2) ;
    S1(2) ;
    S6(1,2) ;
  }
  for (p1=max(-54*n+4,4*n+2);p1<=6;p1++) {
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
  }
  for (p1=7;p1<=min(min(2*n+2,9),floord(4*n+12,3));p1++) {
    for (p2=ceild(-p1+2,4);p2<=-1;p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
    if (p1%2 == 0) {
      j = (p1-2)/2 ;
      S6(1,(p1-2)/2) ;
    }
    if ((p1+1)%2 == 0) {
      i = (p1-3)/2 ;
      S2((p1-3)/2,1) ;
    }
  }
  for (p1=2*n+3;p1<=min(9,4*n-2);p1++) {
    for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  if (n >= 4) {
    S4(2,3) ;
    S4(1,4) ;
    S5(2,3,1) ;
    S6(2,3) ;
    S1(4) ;
    S6(1,4) ;
  }
  if (n == 3) {
    S4(2,3) ;
    S5(2,3,1) ;
    S6(2,3) ;
    S1(4) ;
  }
  for (p1=11;p1<=min(12,2*n+2);p1++) {
    p2 = floord(-p1+5,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    for (p2=ceild(-p1+6,4);p2<=-1;p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    if (p1%2 == 0) {
      j = (p1-4)/2 ;
      S6(2,(p1-4)/2) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
    if (p1%2 == 0) {
      j = (p1-2)/2 ;
      S6(1,(p1-2)/2) ;
    }
    if ((p1+1)%2 == 0) {
      i = (p1-3)/2 ;
      S2((p1-3)/2,1) ;
    }
    for (p2=2;p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  if (n == 4) {
    S2(4,1) ;
    S2(3,2) ;
  }
  if (n == 5) {
    S3(3) ;
    S2(5,1) ;
    S2(4,2) ;
  }
  if (n >= 6) {
    S3(3) ;
    S2(5,1) ;
    S2(4,2) ;
  }
  if ((n <= 4) && (n >= 4)) {
    p1 = 2*n+4 ;
    for (p2=ceild(-n-1,2);p2<=-2;p2++) {
      j = p2+n+2 ;
      S4(-p2,p2+n+2) ;
    }
    for (p2=ceild(-n+1,2);p2<=-1;p2++) {
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        j = p2+n+1 ;
        S5(-p2+1,p2+n+1,p3) ;
      }
    }
    S6(2,n) ;
    i = n+1 ;
    S1(n+1) ;
  }
  for (p1=14;p1<=2*n+2;p1++) {
    p2 = floord(-p1+5,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    p2 = floord(-p1+9,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    for (p3=1;p3<=-p2;p3++) {
      i = -p2+1 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-2)/2 ;
        S5(-p2+1,(p1+2*p2-2)/2,p3) ;
      }
    }
    for (p2=ceild(-p1+10,4);p2<=-1;p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    if (p1%2 == 0) {
      j = (p1-4)/2 ;
      S6(2,(p1-4)/2) ;
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
    if (p1%2 == 0) {
      j = (p1-2)/2 ;
      S6(1,(p1-2)/2) ;
    }
    if ((p1+1)%2 == 0) {
      i = (p1-3)/2 ;
      S2((p1-3)/2,1) ;
    }
    for (p2=2;p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  if ((n <= 4) && (n >= 4)) {
    S3(3) ;
    for (p2=-n+6;p2<=2;p2++) {
      i = -p2+6 ;
      S2(-p2+6,p2) ;
    }
  }
  if (n >= 7) {
    p1 = 2*n+3 ;
    if ((n+1)%2 == 0) {
      i = (n+1)/2 ;
      S3((n+1)/2) ;
    }
    S2(n,1) ;
    for (p2=2;p2<=floord(n,2);p2++) {
      i = -p2+n+1 ;
      S2(-p2+n+1,p2) ;
    }
  }
  if ((n <= 6) && (n >= 6)) {
    p1 = 2*n+3 ;
    if ((n+1)%2 == 0) {
      i = (n+1)/2 ;
      S3((n+1)/2) ;
    }
    S2(n,1) ;
    for (p2=2;p2<=floord(n,2);p2++) {
      i = -p2+n+1 ;
      S2(-p2+n+1,p2) ;
    }
  }
  if (n >= 7) {
    p1 = 2*n+4 ;
    for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) {
      j = p2+n+2 ;
      S4(-p2,p2+n+2) ;
    }
    for (p2=ceild(-n+1,2);p2<=floord(-2*n+5,4);p2++) {
      j = p2+n+2 ;
      S4(-p2,p2+n+2) ;
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        j = p2+n+1 ;
        S5(-p2+1,p2+n+1,p3) ;
      }
    }
    for (p2=ceild(-n+3,2);p2<=-2;p2++) {
      j = p2+n+2 ;
      S4(-p2,p2+n+2) ;
      i = -p2+2 ;
      j = p2+n ;
      S6(-p2+2,p2+n) ;
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        j = p2+n+1 ;
        S5(-p2+1,p2+n+1,p3) ;
      }
    }
    j = n-1 ;
    S6(3,n-1) ;
    S5(2,n,1) ;
    S6(2,n) ;
    i = n+1 ;
    S1(n+1) ;
  }
  if ((n <= 5) && (n >= 5)) {
    p1 = 2*n+4 ;
    for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) {
      j = p2+n+2 ;
      S4(-p2,p2+n+2) ;
    }
    for (p2=ceild(-n+1,2);p2<=-2;p2++) {
      j = p2+n+2 ;
      S4(-p2,p2+n+2) ;
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        j = p2+n+1 ;
        S5(-p2+1,p2+n+1,p3) ;
      }
    }
    for (p2=-1;p2<=floord(-2*n+5,4);p2++) {
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        j = p2+n+1 ;
        S5(-p2+1,p2+n+1,p3) ;
      }
    }
    for (p2=ceild(-n+3,2);p2<=-1;p2++) {
      i = -p2+2 ;
      j = p2+n ;
      S6(-p2+2,p2+n) ;
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        j = p2+n+1 ;
        S5(-p2+1,p2+n+1,p3) ;
      }
    }
    S6(2,n) ;
    i = n+1 ;
    S1(n+1) ;
  }
  if ((n <= 6) && (n >= 6)) {
    p1 = 2*n+4 ;
    for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) {
      j = p2+n+2 ;
      S4(-p2,p2+n+2) ;
    }
    for (p2=ceild(-n+1,2);p2<=-2;p2++) {
      j = p2+n+2 ;
      S4(-p2,p2+n+2) ;
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        j = p2+n+1 ;
        S5(-p2+1,p2+n+1,p3) ;
      }
    }
    j = n-1 ;
    S6(3,n-1) ;
    S5(2,n,1) ;
    S6(2,n) ;
    i = n+1 ;
    S1(n+1) ;
  }
  for (p1=2*n+5;p1<=min(4*n-10,2*n+58);p1++) {
    p2 = floord(-p1+5,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    p2 = floord(-p1+9,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    for (p3=1;p3<=-p2;p3++) {
      i = -p2+1 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-2)/2 ;
        S5(-p2+1,(p1+2*p2-2)/2,p3) ;
      }
    }
    for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    p2 = floord(-p1+2*n+2,2) ;
    i = -p2+2 ;
    if (p1%2 == 0) {
      j = (p1+2*p2-4)/2 ;
      S6(-p2+2,(p1+2*p2-4)/2) ;
    }
    for (p3=1;p3<=-p2;p3++) {
      i = -p2+1 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-2)/2 ;
        S5(-p2+1,(p1+2*p2-2)/2,p3) ;
      }
    }
    for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) {
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  for (p1=max(4*n-9,2*n+5);p1<=min(4*n-8,2*n+58);p1++) {
    p2 = floord(-p1+5,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    p2 = floord(-p1+2*n+2,2) ;
    i = -p2+2 ;
    if (p1%2 == 0) {
      j = (p1+2*p2-4)/2 ;
      S6(-p2+2,(p1+2*p2-4)/2) ;
    }
    for (p3=1;p3<=-p2;p3++) {
      i = -p2+1 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-2)/2 ;
        S5(-p2+1,(p1+2*p2-2)/2,p3) ;
      }
    }
    for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) {
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  for (p1=max(4*n-7,2*n+5);p1<=min(4*n-6,2*n+58);p1++) {
    p2 = floord(-p1+5,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) {
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) {
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) {
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  for (p1=max(max(4*n-5,14),2*n+5);p1<=min(4*n-2,2*n+58);p1++) {
    for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
    }
    for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) {
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    for (p2=max(ceild(-p1+10,4),ceild(-p1+2*n+3,2));p2<=min(floord(-p1+2*n+4,2),-1);p2++) {
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  if ((n >= 2) && (n <= 29)) {
    p1 = 4*n-1 ;
    p2 = n-1 ;
    j = n-1 ;
    S2(n,n-1) ;
  }
  for (p1=2*n+59;p1<=4*n-10;p1++) {
    p2 = floord(-p1+5,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    p2 = floord(-p1+9,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    for (p3=1;p3<=-p2;p3++) {
      i = -p2+1 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-2)/2 ;
        S5(-p2+1,(p1+2*p2-2)/2,p3) ;
      }
    }
    for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    p2 = floord(-p1+2*n+2,2) ;
    i = -p2+2 ;
    if (p1%2 == 0) {
      j = (p1+2*p2-4)/2 ;
      S6(-p2+2,(p1+2*p2-4)/2) ;
    }
    for (p3=1;p3<=-p2;p3++) {
      i = -p2+1 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-2)/2 ;
        S5(-p2+1,(p1+2*p2-2)/2,p3) ;
      }
    }
    p2 = floord(-p1+2*n+4,2) ;
    i = -p2+2 ;
    if (p1%2 == 0) {
      j = (p1+2*p2-4)/2 ;
      S6(-p2+2,(p1+2*p2-4)/2) ;
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  for (p1=max(4*n-9,2*n+59);p1<=4*n-8;p1++) {
    p2 = floord(-p1+5,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    p2 = floord(-p1+2*n+2,2) ;
    i = -p2+2 ;
    if (p1%2 == 0) {
      j = (p1+2*p2-4)/2 ;
      S6(-p2+2,(p1+2*p2-4)/2) ;
    }
    for (p3=1;p3<=-p2;p3++) {
      i = -p2+1 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-2)/2 ;
        S5(-p2+1,(p1+2*p2-2)/2,p3) ;
      }
    }
    p2 = floord(-p1+2*n+4,2) ;
    i = -p2+2 ;
    if (p1%2 == 0) {
      j = (p1+2*p2-4)/2 ;
      S6(-p2+2,(p1+2*p2-4)/2) ;
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  for (p1=max(4*n-7,2*n+59);p1<=4*n-6;p1++) {
    p2 = floord(-p1+5,4) ;
    if (p1%2 == 0) {
      j = (p1+2*p2)/2 ;
      S4(-p2,(p1+2*p2)/2) ;
    }
    for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) {
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) {
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    p2 = floord(-p1+2*n+4,2) ;
    i = -p2+2 ;
    if (p1%2 == 0) {
      j = (p1+2*p2-4)/2 ;
      S6(-p2+2,(p1+2*p2-4)/2) ;
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  for (p1=max(4*n-5,2*n+59);p1<=4*n-2;p1++) {
    for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) {
      if (p1%2 == 0) {
        j = (p1+2*p2)/2 ;
        S4(-p2,(p1+2*p2)/2) ;
      }
    }
    for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) {
      for (p3=1;p3<=-p2;p3++) {
        i = -p2+1 ;
        if (p1%2 == 0) {
          j = (p1+2*p2-2)/2 ;
          S5(-p2+1,(p1+2*p2-2)/2,p3) ;
        }
      }
    }
    for (p2=max(ceild(-p1+10,4),ceild(-p1+2*n+3,2));p2<=floord(-p1+2*n+4,2);p2++) {
      i = -p2+2 ;
      if (p1%2 == 0) {
        j = (p1+2*p2-4)/2 ;
        S6(-p2+2,(p1+2*p2-4)/2) ;
      }
    }
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) {
      if ((p1+1)%2 == 0) {
        i = (p1-2*p2-1)/2 ;
        S2((p1-2*p2-1)/2,p2) ;
      }
    }
  }
  for (p1=max(4*n,7);p1<=min(4*n+1,2*n+58);p1++) {
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
  }
  if (n >= 30) {
    p1 = 4*n-1 ;
    p2 = n-1 ;
    j = n-1 ;
    S2(n,n-1) ;
  }
  for (p1=max(max(-54*n+4,4*n+2),7);p1<=2*n+58;p1++) {
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
  }
  for (p1=max(4*n,2*n+59);p1<=4*n+1;p1++) {
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
  }
}
