#include <perms.h>

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

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

  //     2  %INTEGER I,J,K

  int I;
  int J;
  int K;

  //     3        I=3; J=4; K=5

  I = 3;
  J = 4;
  K = 5;

  //     4  %INTEGERARRAY A(0:3,2:4,1:5)

  int A[4][3][5];
  struct _imp_dv A_dv = {A, sizeof(int) /*, dims, <bounds> */};

  //     5  %INTEGERARRAY B(0:I,2:J,1:K)

  int B[I + 1][J - 2 + 1][K - 1 + 1];
  struct _imp_dv B_dv = {B, sizeof(int) /*, dims, <bounds> */};

  //     6        %FOR I=0,1,3 %CYCLE

  // %for I = 0, 1, 3 %cycle
  {
    I = -1;
  L_0001:
    if (I == 3) goto L_0002;
    I += 1;

    //     7           %FOR J=2,1,4 %CYCLE

    // %for J = 2, 1, 4 %cycle
    {
      J = 1;
    L_0004:
      if (J == 4) goto L_0005;
      J += 1;

      //     8              %FOR K=1,1,5 %CYCLE

      // %for K = 1, 1, 5 %cycle
      {
        K = 0;
      L_0007:
        if (K == 5) goto L_0008;
        K += 1;

        //     9                 A(I,J,K)=M'A'<<24!I<<16!J<<8!K

        A[I][J - 2][K - 1] = 65 << 24 | I << 16 | J << 8 | K;

        //    10                 B(I,J,K)=M'B'<<24!I<<16!J<<8!K

        B[I][J - 2][K - 1] = 66 << 24 | I << 16 | J << 8 | K;

        //    11              %REPEAT

        goto L_0007;
      }

    L_0008:;

    //    12           %REPEAT

      goto L_0004;
    }

  L_0005:;

  //    13        %REPEAT

    goto L_0001;
  }

L_0002:;

//    14        %FOR I=0,1,3 %CYCLE

  // %for I = 0, 1, 3 %cycle
  {
    I = -1;
  L_000A:
    if (I == 3) goto L_000B;
    I += 1;

    //    15           %FOR J=2,1,4 %CYCLE

    // %for J = 2, 1, 4 %cycle
    {
      J = 1;
    L_000C:
      if (J == 4) goto L_000D;
      J += 1;

      //    16              %FOR K=1,1,5 %CYCLE

      // %for K = 1, 1, 5 %cycle
      {
        K = 0;
      L_000E:
        if (K == 5) goto L_000F;
        K += 1;

        //    17                 %IF A(I,J,K)&X'FFFFFF'#B(I,J,K)&X'FFFFFF' %START

        if (A[I][J - 2][K - 1] & 16777215 == B[I][J - 2][K - 1] & 16777215) goto L_0010;

          //    18                    PRINTSTRING("ERROR")

        _imp_PRINTSTRING(_imp_str_literal("ERROR"));

        //    19                    %MONITOR

        /*_imp_monitor(__LINE__, __FILE__, PRETTY_FUNCTION);*/

        //    20                    %STOP

        _imp_stop(0);

        //    21                 %FINISH

      L_0010:;

      //    22              %REPEAT

        goto L_000E;
      }

    L_000F:;

    //    23           %REPEAT

      goto L_000C;
    }

  L_000D:;

  //    24        %REPEAT

    goto L_000A;
  }

L_000B:;

//    25        PRINTSTRING("TEST OK")

  _imp_PRINTSTRING(_imp_str_literal("TEST OK"));

  //    26  %ENDOFPROGRAM

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