/* { dg-do compile } */

int printf (const char *, ...);

static short f, p, q, s, u, aa, ab, ac;
static int b, c, d, e, h, k, l, m, n, o, r, t, v, w, x, y, z, ad, ae, af, ag, ah, ai, aj, ak, al, am, an;
int a, ao, ap, aq, ar, g, as, at, au, av, aw, ax, ay;

void foo ()
{ 
  int ba[2], i, j, bb;
  while (b)
    { 
      b++;
      while (b)
	{ 
	  for (; aw; aw++)
	    for (; q; q++)
	      { 
		short bc[20];
		if (k)
		  for (i = 0; i < 4; i++)
		    for (j = 0; j < 4; j++)
		      if (p)
			bc[i * 4 + j] = 8;
		for (; ad; ad--)
		  t = bc[1];
	      }
	  for (bb = 0; bb < 5; bb++)
	    if (m && v)
	      { 
		printf ("%d", n);
		v = g && v;
		n = 0;
	      }
	  ab &= ba[0];
	  aw = l;
	  aa++;
	  x++;
	  while (1)
	    { 
	      int bd[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1};
	      ap = a ? ba[1] : 0;
	      if (ba[0] && o < ax)
		{ 
		  int be[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
		  for (; ae; ae++)
		    { 
		      e ^= ba[b] ^ aa;
		      f = r;
		      for (; y; y++)
			aj &= u | ag;
		      int e[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
		      if (a)
			{ 
			  r = c;
			  aj &= ag |= aq;
			}
		      av = ai * u;
		      af = c;
		    }
		  au = d;
		  p++;
		  u = aj;
		  a = ba[1];
		  at = ar = af != ai && l;
		  as = ax = f;
		  ao = ak ? 0 : ah;
		  aw = ao;
		}
	      ay = c;
	      int bf[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
	      if (w < f)
		{ 
		  int bg[] = {0};
		  if (aw)
		    break;
		}
	      else
		aw = aa | (h &= ag) >> d, c = b = z && am;
	      for (; w; w--)
		l = ac ^= al |= b;
	      for (; k; k = 0)
		{ 
		  int bh = m | s && n;
		  m = bh;
		  for (; t; t--)
		    f = q ^= (c < (e < ah));
		}
	      d = an |= b;
	      if (v)
		{ 
		  int bi[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1};
		  if (aw)
		    break;
		}
	    }
	}
    }
}

int main ()
{ 
  foo ();
  return 0;
}
