/* Generated from ../../../git/cloog/test/vivien2.cloog by CLooG 0.14.0-76-gef19709 gmp bits in 0.58s. */
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<=4;p1++) {
    if (p1%2 == 0) {
      i = (p1-2)/2 ;
      S1((p1-2)/2) ;
    }
  }
  S3(1) ;
  S4(1,2) ;
  S1(2) ;
  S6(1,2) ;
  for (p1=7;p1<=9;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) ;
    }
  }
  S4(2,3) ;
  S4(1,4) ;
  S5(2,3,1) ;
  S6(2,3) ;
  S1(4) ;
  S6(1,4) ;
  for (p1=11;p1<=12;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) ;
      }
    }
  }
  S3(3) ;
  S2(5,1) ;
  S2(4,2) ;
  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) ;
      }
    }
  }
  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) ;
  }
  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) ;
  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=4*n-9;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) ;
      }
    }
    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) ;
    }
    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=4*n-7;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) ;
        }
      }
    }
    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) ;
    }
    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=4*n-5;p1<=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+2*n+3,2),ceild(-p1+10,4));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) ;
    }
    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=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) ;
      }
    }
  }
  p1 = 4*n-1 ;
  p2 = n-1 ;
  j = n-1 ;
  S2(n,n-1) ;
  for (p1=4*n;p1<=4*n+1;p1++) {
    if ((p1+3)%4 == 0) {
      i = (p1-1)/4 ;
      S3((p1-1)/4) ;
    }
  }
}
