#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %diagnose 16_800F

// _imp_diagnose(0x800f); /* %diagnose is a compiler directive and does not generate code */

//     2
//     3  %begin

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

  //     4     %integer g = 0

  int G;
  G = 0;

  //     5
  //     6     %routine p

  void P(void) {
    //     7        %integer a = 10

    int A;
    A = 10;

    //     8
    //     9        %routine q

    void Q(void) {
      //    10           %integer b = 20

      int B;
      B = 20;

      //    11
      //    12           %routine r

      void R(void) {
        //    13              g = 1

        G = 1;

        //    14              a = 11

        A = 11;

        //    15              b = 21

        B = 21;

        //    16           %end

        return;
      } /* end of R */

      //    17
      //    18           r

      R();

      //    19           write(b,0);  newline

      _imp_WRITE(B, 0);
      _imp_NEWLINE();

      //    20        %end

      return;
    } /* end of Q */

    //    21
    //    22        q

    Q();

    //    23        write(a,0);  newline

    _imp_WRITE(A, 0);
    _imp_NEWLINE();

    //    24     %end

    return;
  } /* end of P */

  //    25
  //    26     p

  P();

  //    27     write(g,0);  newline

  _imp_WRITE(G, 0);
  _imp_NEWLINE();

  //    28  %endofprogram

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