--- /dev/null
+PROGRAM PLOTKREUZKURVE(INPUT,OUTPUT);
+
+ CONST H0=640;
+
+ VAR N,H,I,R: INTEGER;
+
+ PROCEDURE ANFANG;
+ BEGIN
+ WRITELN("H", H DIV 2 + 100 :1, "@", H + H DIV 2 + 100 :1, "AKI")
+ END (* ANFANG *);
+
+ PROCEDURE STRECKE(R: INTEGER);
+ BEGIN
+ CASE R MOD 4 OF
+ 0: WRITELN(H:1,"A@J");
+ 1: WRITELN(H:1,"@AJ");
+ 2: WRITELN(H:1,"Q@J");
+ 3: WRITELN(H:1,"PAJ")
+ END
+ END (* STRECKE *);
+
+ PROCEDURE SCHLUSS;
+ VAR I: INTEGER;
+ BEGIN
+ WRITELN("H3000@100AK");
+ FOR I := 1 TO 384 DO WRITE(" "); WRITELN
+ END (* SCHLUSS *);
+
+
+ PROCEDURE KREUZ(I,R: INTEGER);
+ BEGIN
+ IF I>0 THEN
+ BEGIN
+ KREUZ(I-1,R);
+ STRECKE(R+1); STRECKE(R);
+ KREUZ(I-1,R+1);
+ STRECKE(R);
+ KREUZ(I-1,R-1);
+ STRECKE(R); STRECKE(R-1);
+ KREUZ(I-1,R)
+ END ELSE STRECKE(R)
+ END (* KREUZ *);
+
+
+BEGIN
+ WHILE NOT EOF DO
+ BEGIN READ(N);
+ H := H0; FOR I := 1 TO N DO H := H DIV 2;
+ ANFANG;
+ FOR R := 0 TO 3 DO
+ BEGIN KREUZ(N,R); STRECKE(R+1); STRECKE(R) END;
+ SCHLUSS
+ END
+END.