// Выводит символы и пары символов, входящие в строку
// К вопросу otvet.mail.ru/question/182440175
// Copyleft Alexey Kuzminov 2015
program question182440175;

type
  SymbolList = String; // Перечень символов, поддерживает размер (Length) и оператор []

// добавляет символ в список, возвращая признак того, он что уже был
function AddSymbol(var list: SymbolList; c: Char): Boolean;
var
  p: Integer;
begin
  p := Pos(c, list);
  AddSymbol := p > 0;
  if not AddSymbol then list := list + c;
  // если AddSymbol = True, то можно передвинуть list[pos] к началу на символ,
  // чтобы в следующий раз он быстрее нашелся
end;

// Обрабатывает строку символов.
// Выводит:
// - перечень символов, в нее входящих
// - перечень пар, которые в неё входят
procedure Process(const s: String);
var
  symbols: SymbolList; // перечень символов строки
  pair: array[char] of SymbolList; // массив пар символов (ab = pair[a] contains b)
var
  i: Integer;
  c: Char;
  first: Boolean;
begin
  // инициализация списка пустотой
  symbols := ''; 
  for c := Low(pair) to High(pair) do
    pair[c] := '';

  WriteLn('{', s, '}');
 
  // случай пустой строки рассмотрим отдельно
  if Length(s) = 0 then begin
    WriteLn('   no chars');
    Exit;
  end;
  
  // первый символ добавим вручную
  AddSymbol(symbols, s[1]);
  // начнем итерацию со второго символа
  for i := 2 to Length(s) do begin
    AddSymbol(symbols, s[i]);
    first := not AddSymbol(pair[s[i-1]], s[i]);
    // можно анализировать признак того, что пара s[i-1]s[i] ещё не была в строке
  end;
  
  // вывод символов строки
  Write('   [');
  for i := 1 to Length(symbols)-1 do
    Write('''', symbols[i], ''', ');
  WriteLn('''', symbols[Length(symbols)], ''']');

  // вывод пар символов
  Write('   [');
  first := True;
  for c := Low(pair) to High(pair) do if Length(pair) > 0 then 
    for i := 1 to Length(pair[c]) do begin
      // перед первой парой символов не выводим ', '
      if not first then Write(', ') else first := False;
      Write('''', c, pair[c][i], '''');
  	end;
  WriteLn(']');
end;  
  
begin
  Process('');
  Process('a');
  Process('aaaa');
  Process('ababa');
  Process('abbbaaababaa');
  Process('abbbaaababaca');
end.