function mult(const before: string; n: integer): string; function get_chr(value: integer): char; begin get_chr := chr(ord(value) + ord('0')); end; var i, X: integer; after: string; begin X := 0; after := ''; for i := length(before) downto 1 do begin X := X + n * (ord(before[i]) - ord('0')); after := get_chr(X mod 10) + after; X := X div 10; end; if X > 0 then after := get_chr(X) + after; mult := after; end; function check(s1, s2: string): boolean; begin check := ((s1 + s2) > (s2 + s1)) end; const n = 100; type power_str = string[32]; arr = array[1 .. n] of power_str; var s: arr; i, j: integer; vs: power_str; begin s[1] := '2'; for i := 2 to n do s[i] := mult(s[pred(i)], 2); for i := 1 to n do begin for j := n downto i + 1 do if check(s[pred(j)], s[j]) then begin vs := s[pred(j)]; s[pred(j)] := s[j]; s[j] := vs; end; end; for i := 1 to n do writeln(s[i]); end.