#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, a,b,c, q

  int I;
  int A;
  int B;
  int C;
  int Q;

  //     3
  //     4    q = 0;

  Q = 0;

  //     5
  //     6    %for i = 3,1,5 %cycle

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

    //     7      q = q+i

    Q = Q + I;

    //     8    %repeat

    goto L_0001;
  }

L_0002:;

//     9
//    10    %for i = 3,2,5 %cycle

  // %for I = 3, 2, 5 %cycle
  {
    I = 1;
  L_0004:
    if (I == 5) goto L_0005;
    I += 2;

    //    11      q = q+i

    Q = Q + I;

    //    12    %repeat

    goto L_0004;
  }

L_0005:;

//    13
//    14    %for i = 5,-1,3 %cycle

  // %for I = 5,  -1, 3 %cycle
  {
    I = 6;
  L_0006:
    if (I == 3) goto L_0007;
    I -= 1;

    //    15      q = q+i

    Q = Q + I;

    //    16    %repeat

    goto L_0006;
  }

L_0007:;

//    17
//    18    %for i = 5,-2,3 %cycle

  // %for I = 5,  -2, 3 %cycle
  {
    I = 7;
  L_0008:
    if (I == 3) goto L_0009;
    I -= 2;

    //    19      q = q+i

    Q = Q + I;

    //    20    %repeat

    goto L_0008;
  }

L_0009:;

//    21
//    22    a = 3; b = 1; c = 5

  A = 3;
  B = 1;
  C = 5;

  //    23
  //    24    %for i = a, b, c %cycle

  // %for I = A, B, C %cycle
  {
    int _initial = A, _increment = B, _final = C;
    if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = A, B, C");
    I = _initial - _increment;
  L_000A:
    if (I == _final) goto L_000B;
    I += _increment;

    //    25      q = q+i+a

    Q = Q + I + A;

    //    26    %repeat

    goto L_000A;
  }

L_000B:;

//    27
//    28    a = 3; b = 2; c = 5

  A = 3;
  B = 2;
  C = 5;

  //    29
  //    30    %for i = a, b, c %cycle

  // %for I = A, B, C %cycle
  {
    int _initial = A, _increment = B, _final = C;
    if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = A, B, C");
    I = _initial - _increment;
  L_000C:
    if (I == _final) goto L_000D;
    I += _increment;

    //    31      q = q+i+a

    Q = Q + I + A;

    //    32    %repeat

    goto L_000C;
  }

L_000D:;

//    33
//    34    a = 5; b = -1; c = 3

  A = 5;
  B = -1;
  C = 3;

  //    35
  //    36    %for i = a, b, c %cycle

  // %for I = A, B, C %cycle
  {
    int _initial = A, _increment = B, _final = C;
    if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = A, B, C");
    I = _initial - _increment;
  L_000E:
    if (I == _final) goto L_000F;
    I += _increment;

    //    37      q = q+i+a

    Q = Q + I + A;

    //    38    %repeat

    goto L_000E;
  }

L_000F:;

//    39
//    40    a = 5; b = -2; c = 3

  A = 5;
  B = -2;
  C = 3;

  //    41
  //    42    %for i = a, b, c %cycle

  // %for I = A, B, C %cycle
  {
    int _initial = A, _increment = B, _final = C;
    if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = A, B, C");
    I = _initial - _increment;
  L_0010:
    if (I == _final) goto L_0011;
    I += _increment;

    //    43      q = q+i+a

    Q = Q + I + A;

    //    44    %repeat

    goto L_0010;
  }

L_0011:;

//    45
//    46    %if q = 120 %then printstring("Pass!") %else printstring("Fail!")

  if (Q != 120) goto L_0012;
  _imp_PRINTSTRING(_imp_str_literal("Pass!"));
  goto L_0013;
L_0012:;
  _imp_PRINTSTRING(_imp_str_literal("Fail!"));
L_0013:;

//    47    newline

  _imp_NEWLINE();

  //    48
  //    49  %endofprogram

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