1#define NG   0x100L
2
3unsigned long flg = 0;
4
5long sub (int n)
6{
7  int a, b ;
8
9  if (n >= 2)
10    {
11      if (n % 2 == 0)
12	{
13	  a = sub (n / 2);
14
15	  return (a + 2 * sub (n / 2 - 1)) * a;
16	}
17      else
18	{
19	  a = sub (n / 2 + 1);
20	  b = sub (n / 2);
21
22	  return a * a + b * b;
23	}
24    }
25  else
26    return (long) n;
27}
28
29int main (void)
30{
31  if (sub (30) != 832040L)
32    flg |= NG;
33
34  if (flg)
35    abort ();
36
37  exit (0);
38}
39