begin;
    comment  pentomino, 130968
    ;
    integer SCORE, NUMMER, LENGTE, BREEDTE, AANTALSTENEN, AANTALSTANDEN, I, J, K, TELLER, LB;
    LENGTE := READ;
    BREEDTE := READ;
    AANTALSTENEN := READ;
    AANTALSTANDEN := READ;
    LB := LENGTE TIMES (BREEDTE - 1);
    begin;
        integer array BORD[-39 : 100], STANDEN, WIJZER[1 : AANTALSTENEN], INFORMATIE[1 : 8 TIMES AANTALSTANDEN];
        Boolean array ONGEBRUIKT[1 : AANTALSTENEN];
        procedure OUTPUT;
        begin;
            integer I, J;
            SCORE := SCORE + 1;
            SPACE(1);
            for J := 1 step 1 until 2 TIMES LENGTE do
              begin;
                PRINTTEXT("-");
                SPACE(1);
            end ;
            comment  ABSFIXT (6, 2, time)
            ;
            NLCR;
            for I := 0 step LENGTE until LB do
              begin;
                PRINTTEXT("I");
                for J := 1 step 1 until LENGTE - 1 do
                  begin;
                    SPACE(3);
                    if BORD[I + J] NOTEQUAL BORD[I + J + 1] then PRINTTEXT("I") else SPACE(1);
                end ;
                SPACE(3);
                PRINTTEXT("I");
                NLCR;
                SPACE(1);
                if I < LB then begin;
                    for J := 1 step 1 until LENGTE do
                      begin;
                        if BORD[I + J] NOTEQUAL BORD[I + J + LENGTE] then begin;
                            PRINTTEXT("-");
                            SPACE(1);
                            PRINTTEXT("-");
                            SPACE(1);
                        end  else SPACE(4);
                    end ;
                end  else for J := 1 step 1 until 2 TIMES LENGTE do
                  begin;
                    PRINTTEXT("-");
                    SPACE(1);
                end ;
                NLCR;
            end ;
            NLCR;
            NLCR;
            if SCORE = 7 then goto EX;
        end OUTPUT;
        procedure UP(VELD, KOLOM); 
          value VELD, KOLOM;
          integer VELD, KOLOM;
        begin;
            integer I, J, K, R, W, STEEN, AANTAL;
            NUMMER := NUMMER + 1;
            for STEEN := 1 step 1 until AANTALSTENEN do
              if ONGEBRUIKT[STEEN] then begin;
                ONGEBRUIKT[STEEN] := false;
                BORD[VELD] := STEEN;
                AANTAL := STANDEN[STEEN] - 1;
                for I := 0 step 1 until AANTAL do
                  begin;
                    W := WIJZER[STEEN] + 4 TIMES I;
                    if BORD[INFORMATIE[W] + VELD] = 0 then begin;
                        if BORD[INFORMATIE[W + 1] + VELD] = 0 then begin;
                            if BORD[INFORMATIE[W + 2] + VELD] = 0 then begin;
                                if BORD[INFORMATIE[W + 3] + VELD] = 0 then begin;
                                    for J := 0,
                                             1,
                                             2,
                                             3 do
                                      BORD[INFORMATIE[W + J] + VELD] := STEEN;
                                    if NUMMER = AANTALSTENEN then OUTPUT else begin;
                                        for K := KOLOM step 1 until LENGTE do
                                          for R := 0 step LENGTE until LB do
                                          if BORD[R + K] = 0 then goto BEET;
                                        BEET: UP(R + K, K);
                                    end ;
                                    for J := 0,
                                             1,
                                             2,
                                             3 do
                                      BORD[INFORMATIE[W + J] + VELD] := 0;
                                end ;
                            end ;
                        end ;
                    end ;
                end ;
                ONGEBRUIKT[STEEN] := true;
            end ;
            BORD[VELD] := 0;
            DOWN: NUMMER := NUMMER - 1;
        end UP;
        TELLER := 1;
        for I := 1 step 1 until AANTALSTENEN do
          begin;
            J := READ;
            comment  steennummer, wordt niet gebruikt
            ;
            WIJZER[I] := TELLER;
            STANDEN[I] := READ;
            for J := 1 step 1 until STANDEN[I] do
              begin;
                for K := 0 step 1 until 3 do
                  INFORMATIE[TELLER + K] := READ;
                TELLER := TELLER + 4;
            end ;
        end ;
        for I := -39 step 1 until 0,
                 61 step 1 until 100 do
          BORD[I] := -1;
        for I := 1 step 1 until 60 do
          BORD[I] := 0;
        for I := 1 step 1 until AANTALSTENEN do
          ONGEBRUIKT[I] := true;
        SCORE := NUMMER := 0;
        NLCR;
        PRINTTEXT("The first 7 solutions:");
        NLCR;
        NLCR;
        NLCR;
        UP(1, 1);
        EX: ;
    end ;
end;