Mike: does this routine in ntuple.hpp ever get called with negative exponents?

inline void ntuple::syz(int nvars, const int *a, const int *b, int *a1, int *b1, int &overflowed)
{
     for (int i=0; i<nvars; i++) {
	  if ((a[i] < 0 || b[i] < 0) && !(a[i] < 0 && b[i] < 0)) {
	       a1[i] = -a[i];
	       b1[i] = -b[i];
	       if (a1[i] == a[i] && a[i] < 0 || b1[i] == b[i] && b[i] < 0) { // yes, we overflow a bit too often here
		    overflowed = true;
		    return;
	       }
	  }
	  else {
	       int c = a[i] - b[i];
	       if (c >= 0) a1[i] = 0, b1[i] = c;
	       else a1[i] = -c, b1[i] = 0;
	  }
     }
}
