===== PascalABC.NET =====
begin
var D := new Dictionary<char, integer>; // словарь
var s := ReadlnString('Введите текст:') // ввести строку текста
.ToLower // перекодировать буквы к нижнему регистру
.Where(c -> c.IsLetter); // отобрать только буквы
foreach var c in s do // повторить для каждого символа в строке
if D.ContainsKey(c) then // если символ уже встречался
D[c] += 1 // увеличить его счетчик на 1
else // в противном случае
D.Add(c, 1); // добавить символ в словарь со счетчиком 1
D.Where(p -> p.Value > 1) // отобрать элементы словаря со счетчиком > 1
.Select(p -> p.Key) // выбрать сами символы
.OrderBy(p -> p) // отсортировать по алфавиту
.Println(' ') // вывести через пробел в строку
end.
===== PascalABC.NET =====
begin
var D := new Dictionary<char, integer>; // словарь
var s := ReadlnString('Введите текст:') // ввести строку текста
.ToLower // перекодировать буквы к нижнему регистру
.Where(c -> c.IsLetter); // отобрать только буквы
foreach var c in s do // повторить для каждого символа в строке
if D.ContainsKey(c) then // если символ уже встречался
D[c] += 1 // увеличить его счетчик на 1
else // в противном случае
D.Add(c, 1); // добавить символ в словарь со счетчиком 1
D.Where(p -> p.Value > 1) // отобрать элементы словаря со счетчиком > 1
.Select(p -> p.Key) // выбрать сами символы
.OrderBy(p -> p) // отсортировать по алфавиту
.Println(' ') // вывести через пробел в строку
end.