struct A
{
   int i;
   int j1;
   bool b;
   struct A a;
};
struct B
{
   struct A a;
};

int i, j, k;
struct B b, bb, bbb;
bool bob;

fun g(int i, struct B j) int
{
   int g, m, k;
   return 3;
}

fun foo(int n) int
{
   if (n <= 0)
   {
      return 1;
   }
   else
   {
      return n * foo(n - 1);
   }
}

fun f(int i, struct B j) struct A
{
   int f, l, k;
   b.a.a.a.i = 7;
   return b.a.a.a.a;
}
fun bar(struct B j, int i) void
{
}

fun main() int
{
   struct A a;
   int i, j, k;
   bool b;
      int h;
   {
      i = --2;
      if (i < g(1,null))
      {
         print 1;
      }

      if (i > g(1,null))
      {
         print 1;
      }
      else
      {
         print 3 endl;
      }
      while (true)
      {
         print 7;
      }
      f(g(1,new B),new B);
      print 1;
      bar(new B, g(1,new B));
      print 2;
      print f(g(1,new B),new B).i endl;
   }
   return 0;
}