Ai tìm giúp mình lỗi trong thuật toán này với!

VAR
dem,i,j,n,k:INTEGER;
kt:BOOLEAN;
a:ARRAY[1..100,1..100] OF INTEGER;
PROCEDURE hv(dem:INTEGER);
BEGIN
    FOR i:=1 TO n DO BEGIN
        kt:=TRUE;
        IF dem>1 THEN FOR j:=1 TO dem-1 DO IF a[k,j]=a[k,dem] THEN kt:=FALSE;
        IF kt=TRUE THEN a[k,dem]:=i;
        IF dem < n THEN hv(dem+1) ELSE k:=k+1;
    END;
END;
BEGIN
    readln(n);
    k:=1;
    hv(1);
    FOR i:=1 TO k-1 DO BEGIN
        FOR j:=1 TO n DO write(a[i,j]);
        writeln;
    END;
    readln;
END.