#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %begin

int main(int argc, char **argv) { /*%begin*/
  _imp_initialise(argc, argv);

  //     2     %integer a = 1

  int A;
  A = 1;

  //     3
  //     4     %routine p

  void P(void) {
    //     5        %integer a = 2

    int A;
    A = 2;

    //     6
    //     7        %routine q

    void Q(void) {
      //     8           %integer a = 3

      int A;
      A = 3;

      //     9
      //    10           %routine r

      void R(void) {
        //    11              a = 4

        A = 4;

        //    12           %end

        return;
      } /* end of R */

      //    13
      //    14           r

      R();

      //    15           write(a, 0);  newline

      _imp_WRITE(A, 0);
      _imp_NEWLINE();

      //    16        %end

      return;
    } /* end of Q */

    //    17
    //    18        q

    Q();

    //    19        write(a, 0);  newline

    _imp_WRITE(A, 0);
    _imp_NEWLINE();

    //    20     %end

    return;
  } /* end of P */

  //    21
  //    22     p

  P();

  //    23     write(a, 0);  newline

  _imp_WRITE(A, 0);
  _imp_NEWLINE();

  //    24
  //    25  %end %of %program

  _imp_stop(0);
  return 0;
end_0:;
}