program convertor; const MAX=100; type cislo=record zaklad:integer; delka: word; cislice: array[1..MAX] of integer; end; {Vypíše dané číslo} procedure vypis(c:cislo); var i:word; begin for i:=c.delka downto 1 do if c.cislice[i]<10 then write(c.cislice[i]) else write(chr(c.cislice[i]+55)); if c.delka=0 then write(0); writeln; end; {Načte číslo od uživatele} procedure nacti(var c:cislo); var i:word; s:string; begin readln(c.zaklad); readln(s); c.delka:=length(s); for i:=c.delka downto 1 do if s[c.delka+1-i]<='9' then c.cislice[i]:=ord(s[c.delka+1-i])-48 else c.cislice[i]:=ord(upcase(s[c.delka+1-i]))-55; end; {Přičte 'nasobek' násobek čísla 'c' k 'd'} procedure pricti_nasobek(var c:cislo; nasobek:word; d:cislo); var i:word; prenos:integer; begin prenos:=0; i:=1; while (prenos<>0) or (i<=d.delka) do begin if (c.delka0) then prenos:=c.cislice[i] div c.zaklad else prenos:=1+(c.cislice[i]+1) div c.zaklad; c.cislice[i]:=c.cislice[i]-prenos*c.zaklad; inc(i); end; end; {Hlavní převáděcí procedura} procedure convert(nova:integer; var c:cislo); var rad:cislo; nove:cislo; i:word; kolik:integer; begin rad.zaklad:=nova; rad.delka:=1; rad.cislice[1]:=1; nove.zaklad:=nova; nove.delka:=0; pricti_nasobek(nove,c.cislice[1],rad); i:=2; while (i<=c.delka) do begin if c.delka=i then c.cislice[c.delka+1]:=0; kolik:=c.zaklad*c.zaklad*c.cislice[i+1]+c.zaklad*c.cislice[i]; if kolik<0 then begin kolik:=kolik-c.zaklad*c.zaklad*c.zaklad; inc(c.cislice[i+2]); end; pricti_nasobek(nove,kolik,rad); inc(i,2); pricti_nasobek(rad,c.zaklad*c.zaklad-1,rad); end; c:=nove; end; var c:cislo; nova:integer; begin nacti(c); readln(nova); convert(nova,c); vypis(c); end.