{$A-}
{Rekursiver Code}

program pushbutton;

{ gibt alle Buchstaben-Kombinationen
  fuer eine vorgegebene Telefonnummer aus.
  Die Codierung der Nummern erfolgt gemaess
  der Buchstabenbelegung auf dem amerikanischen
  Standard Push Button Telefon.

  Andreas Herrmann 30.4.86 }

type ttable = set of char;

const tab:    char=#09;
      cr:     char=#13;
      blank:  char=#32;

var number,result: string[16];
    filename: string[14];
    datei: text;
    ch: char;
    i,j,k: integer;

var digits: ttable;
    code: array[2..9] of string[3];

procedure encode(pos: integer);
{ codiert den String number rekursiv ab Position pos }
var i,j: integer;

begin {encode}
if pos<=length(number) then
    begin
    ch:=copy(number,pos,1);
    if ch in digits then
        begin
        val(ch,i,j);
        for j:=1 to 3 do
            begin
            result[pos]:=copy(code[i],j,1);
{            writeln('at ',pos,':  ',copy(result,1,pos)); }
            encode(pos+1);
            end
        end
    else
        begin
        result[pos]:=ch;
        encode(pos+1);
        end;
    end
else
    begin
    k:=k+1;
    if k mod 3 = 0 then
        begin
        writeln(copy(result,1,length(number)),'   n=',k);
        end
    else
        write(copy(result,1,length(number)),'   ');
    end;
end {encode};


begin {pushbutton}

digits := ['2','3','4','5','6','7','8','9'];

code[2] := 'ABC';
code[3] := 'DEF';
code[4] := 'GHI';
code[5] := 'JKL';
code[6] := 'MNO';
code[7] := 'PRS';
code[8] := 'TUV';
code[9] := 'WXY';

write('Enter telephone number:  ');
readln(number);
k:=0;
encode(1);
end.
