program pretty(input,output);
const   SYMLENGTH = 15;
type
        kinds = (ident, number, op, endfile);
        symb = array[1..SYMLENGTH] of char;
        scanres = record
                        symbol:symb;
                        kind:kinds;
                  end;
var
        ch:     char;
        tabs:   integer;
        a:      scanres;
        working, space, indentflag: boolean;
        procflag, inparam, caseflag: boolean;

procedure indent;
var     i:integer;
begin
        space := false;
        indentflag := false;
        writeln;
        for i := 1 to tabs do write('   ');
end;

procedure writesym(a:scanres);
var
        i:integer;
begin
        if indentflag then indent;
        {
        if (a.kind = ident) and space then write(' ');
        if (a.kind = op) and (a.symbol[1] in ['(','+','-','*']) then write(' ');
        }
        write(' ');
        i := 1;
        while (a.symbol[i] <> ' ') do
        begin
                write(a.symbol[i]);
                i := i + 1;
        end;
        {
        if a.kind <> ident then space := false else space := true;
        if (a.kind = op) and (a.symbol[1] in [')','+','-','*']) then write(' ');
        }
end;

function scanner:scanres;
var
        i:integer;
        comment: boolean;
        Scanner1: scanres;
begin
        for i := 1 to SYMLENGTH do Scanner1.symbol[i] := ' ';

        repeat
                comment := false;
                comment := comment;
                comment := comment;
                comment := comment;
                while (ch in ['	', ' '])  and (not eof(input)) do
                begin
                        ch := input^;
                        get(input);
                end;
                if ch = '{' then
                begin
                        comment := true;
                        while ch <> '}' do
                        begin
                                ch := input^;
                                get(input);
                        end;
                        ch := ' ';
                end;
        until not comment;

        if eof(input) then Scanner1.kind := endfile
        else
        begin
                if ch in ['a'..'z', 'A'..'Z'] then      { identifiers   }
                begin
                        i := 1;
                        while ch in ['a'..'z', 'A'..'Z', '0'..'9'] do
                        begin
                                Scanner1.symbol[i] := ch;
                                i := i + 1;
                                ch := input^;
                                get(input);
                        end;
                        Scanner1.kind := ident;
                end
                else if ch in ['0'..'9'] then           { numbers       }
                begin
                        i := 1;
                        while ch in ['0'..'9'] do
                        begin
                                Scanner1.symbol[i] := ch;
                                i := i + 1;
                                ch := input^;
                                get(input);
                        end;
                        Scanner1.kind := number;
                end
                else begin                              { operators     }
                        Scanner1.symbol[1] := ch;
                        if ch in ['<','>',':'] then
                        begin
                                ch := input^;
                                get(input);
                                if ch in ['=', '>'] then
                                begin
                                        Scanner1.symbol[2] := ch;
                                        ch := input^;
                                        get(input);
                                end;
                        end
                        else if ch = '.' then
                        begin
                                ch := input^;
                                get(input);
                                if ch = '.' then
                                begin
                                        ch := input^;
                                        get(input);
                                        Scanner1.symbol := '..';
                                end;
                        end
                        else
                        begin
                                ch := input^;
                                get(input);
                        end;
                        Scanner1.kind := op;
                end;
        end;
        scanner := Scanner1;
end;

function compar(s1:symb; s2:symb):boolean;
var
        i:integer;
        comp: boolean;
begin
        comp := true; i := 1;
        while (comp and (i <= SYMLENGTH)) do
        begin
                comp := comp and (s1[i] = s2[i]);
                i := i + 1;
        end;
        compar := comp;
end;

begin
        working := true;
        ch := ' ';
        procflag := false;
        caseflag := false;
        inparam := false;
        tabs := 0;
        while working do
        begin
                a := scanner;
                case a.kind of
                endfile: begin
                                working := false;
                                writeln;
                        end;

                ident:  begin
                                if compar(a.symbol, 'begin') then
                                begin
                                        writesym(a);
                                        tabs := tabs + 1;
                                        indent;
                                end
                                else if compar(a.symbol, 'case') then
                                begin
                                        writesym(a);
                                        tabs := tabs + 1;
                                        caseflag := true;
                                end
                                else if compar(a.symbol, 'procedure')  or
                                        compar(a.symbol, 'function') then
                                begin
                                        writeln;
                                        writeln;
                                        writeln;
                                        tabs := 0;
                                        procflag := true;
                                        writesym(a);
                                end
                                else if compar(a.symbol, 'var') or
                                        compar(a.symbol, 'type') or
                                        compar(a.symbol, 'const') or
                                        compar(a.symbol, 'label') then
                                begin
                                        writeln;
                                        tabs := 0;
                                        writesym(a);
                                end
                                else if compar(a.symbol, 'of')  then
                                begin
                                        if caseflag then
                                        begin
                                                indent;
                                                writesym(a);
                                                caseflag := false;
                                        end
                                        else writesym(a)
                                end
                                else if compar(a.symbol, 'record') then
                                begin
                                        writesym(a);
                                        tabs := tabs + 1;
                                        indent;
                                end
                                else if compar(a.symbol, 'end') then
                                begin
                                        tabs := tabs - 1;
                                        indent;
                                        writesym(a);
                                end
                                else writesym(a);
                        end;

                number: writesym(a);

                op:     begin
                                if a.symbol[1] = '''' then
                                begin
                                        write('''');
                                        while ch <> '''' do
                                        begin
                                                write(ch);
                                                ch := input^;
                                                get(input);
                                        end;
                                        write(ch);
                                        ch := input^;
                                        get(input);
                                end
                                else if a.symbol[1] = ';' then
                                begin
                                        writesym(a);
                                        if not inparam then
                                                indentflag := true
                                end
                                else if (a.symbol[1] = '(') and procflag then
                                begin
                                        inparam := true;
                                        writesym(a);
                                end
                                else if a.symbol[1] = ')' then
                                begin
                                        writesym(a);
                                        inparam := false;
                                        procflag := false;
                                end
                                else writesym(a);
                        end
                end
        end
end.
