program SMS;
{
TASK:SMS
LANG:PASCAL
}

{
Audr×nas Gruslys
Vilniaus licÓjus
12 a klasÓ
+370 613 14 600
a.gruslys@gmail.com

Sprendimas paraðytas olimpiados metu :)
}

function Plius(a : char; p : byte) : char;
begin
  Plius := chr(ord(a) + p);
end;

function Zenklas(kiek : byte) : char;
begin
  if kiek = 0 then Zenklas := '.';
  if kiek = 1 then Zenklas := '!';
  if kiek = 2 then Zenklas := '?';
end;

var bylain, bylaout : text;

procedure Raide(Sk : byte; Kiek : byte);
var smb : char;
begin
  if sk < 10 then
    begin
      kiek := kiek - 1;
      if sk = 1 then smb := ' ';
      if sk = 2 then smb := Plius('a',kiek mod 3);
      if sk = 3 then smb := Plius('d',kiek mod 3);
      if sk = 4 then smb := Plius('g',kiek mod 3);
      if sk = 5 then smb := Plius('j',kiek mod 3);
      if sk = 6 then smb := Plius('m',kiek mod 3);
      if sk = 7 then smb := Plius('p',kiek mod 4);
      if sk = 8 then smb := Plius('t',kiek mod 3);
      if sk = 9 then smb := Plius('w',kiek mod 4);
      if sk = 0 then smb := Zenklas(kiek mod 3);
      write(bylaout,smb);
    end;
end;

var smb, kiek : byte;

procedure SkaitytiSimboli;
var RD : char;
    A  : byte;
begin
  read(bylain, RD);
  if RD <> '-' then A := ord(RD) - 48
               else A := 255;
  if A = smb then kiek := kiek + 1
  else
    begin
      Raide(smb, kiek);
      smb := A;
      kiek := 1;
    end;
end;

procedure Skaityti;
begin
  while not eof(bylain) do
    SkaitytiSimboli;
  Raide(smb, kiek);
end;

procedure Paruosti;
begin
  assign(bylain, 'SMS.IN');
  reset(bylain);
  assign(bylaout, 'SMS.OUT');
  rewrite(bylaout);
  smb := 255;
  kiek := 0;
end;

begin
  paruosti;
  skaityti;
  close(bylain);
  close(bylaout);
end.
