       IDENTIFICATION DIVISION.
       PROGRAM-ID. AOC-2020-03-2.
       AUTHOR. ANNA KOSIERADZKA.
      
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT INPUTFILE ASSIGN TO "d3.input"
           ORGANIZATION IS LINE SEQUENTIAL.
           
       DATA DIVISION.
       FILE SECTION.
         FD INPUTFILE.
         01 INPUTRECORD PIC X(31).
       WORKING-STORAGE SECTION.
         01 FILE-STATUS PIC 9 VALUE 0.
         01 WS-ARR-LEN PIC 9(3) VALUE 323.
         01 WS-ARRAY PIC X(31) OCCURS 1 to 500 DEPENDING ON WS-ARR-LEN.
         01 WS-TREES-PRODUCT PIC 9(20) VALUE 1.

       LOCAL-STORAGE SECTION.
         01 TREES UNSIGNED-INT VALUE 0.
         01 X UNSIGNED-INT VALUE 1.
         01 Y UNSIGNED-INT VALUE 1.
         01 DELTA-X UNSIGNED-INT VALUE 1.
         01 DELTA-Y UNSIGNED-INT VALUE 1.
         01 MAP-WIDTH  UNSIGNED-INT VALUE 31.

       PROCEDURE DIVISION.
       001-MAIN.
           OPEN INPUT INPUTFILE.
           PERFORM 002-READ UNTIL FILE-STATUS = 1.
           CLOSE INPUTFILE.
           PERFORM 004-PROCESS-DELTAS.
           DISPLAY WS-TREES-PRODUCT.
           STOP RUN.

       002-READ.
           READ INPUTFILE
               AT END MOVE 1 TO FILE-STATUS
               NOT AT END PERFORM 003-WRITE-TO-ARRAY
           END-READ.
       
       003-WRITE-TO-ARRAY.
           MOVE INPUTRECORD TO WS-ARRAY(X)
           ADD 1 to X.

       004-PROCESS-DELTAS.
           PERFORM 005-PROCESS-DELTAS-PAIR.
           MOVE 3 TO DELTA-Y.
           PERFORM 005-PROCESS-DELTAS-PAIR.
           MOVE 5 TO DELTA-Y.
           PERFORM 005-PROCESS-DELTAS-PAIR.
           MOVE 7 TO DELTA-Y.
           PERFORM 005-PROCESS-DELTAS-PAIR.
           MOVE 2 TO DELTA-X.
           MOVE 1 TO DELTA-Y.
           PERFORM 005-PROCESS-DELTAS-PAIR.
          
       005-PROCESS-DELTAS-PAIR.
           MOVE 1 TO X.
           MOVE 1 TO Y.
           MOVE 0 TO TREES.
           PERFORM 006-LOOP UNTIL X >= WS-ARR-LEN.
           COMPUTE WS-TREES-PRODUCT = WS-TREES-PRODUCT * TREES.
           
       006-LOOP.
           ADD DELTA-X TO X.
           ADD DELTA-Y TO Y.
           COMPUTE Y = FUNCTION MOD(Y, MAP-WIDTH).
           IF Y = 0 THEN 
               MOVE MAP-WIDTH TO Y
           END-IF.
           IF WS-ARRAY(X)(Y:1) = '#' THEN 
              ADD 1 TO TREES
           END-IF.
