//Pascal ABC.NET v3.1 сборка 1219Const chb:set of char=['а'..'я','a'..'z']; //множество буквVar ar,s,st:string; i,j,n:integer; c:char;begin readln(s); //читаем текст n:=0; //обнуляем счётчик for i:=1 to length(s) do {всё в нижнем регистре, чтобы не считать заглавную и строчную буквы разными} s[i]:=lowcase(s[i]); for i:=1 to length(s) do //снова пройдёмся по каждой букве begin st:=s; {передаём переменной текст, тем самым не трогая "оригинал"} while pos(s[i],st)<>0 do //пока в копии есть символ с заданным циклом for индексом begin delete(st,pos(s[i],st),1); {...удаляем этот символ(по одному за шаг вложенного цикла)} inc(n); //увеличиваем число удалённых end; {таким образом, данный цикл позволяет проверить количество вхождений символа в строку} if (n<=2) and (pos(s[i],ar)=0) and (s[i] in chb) then ar:=ar+s[i]; {если вхождений не больше 2 и символа нет в конечной строке(чтобы не было повторов) и символ есть в множестве букв(чтобы не было знаков препинания), то добаляем в конечную строку} n:=0; //обнуляем счётчик end; for i:=1 to length(ar)-1 do {Здесь могла быть "быстрая сортировка", но люди не знающие ничего, кроме "пузырька" будут против} for j:=i+1 to length(ar) do if ar[i]>ar[j] then {сравниваем символы. Тип char является целочислительным, следовательно, нам можно} begin c:=ar[i]; ar[i]:=ar[j]; ar[j]:=c; end; writeln('Result:'); //вывод конечной строки for i:=1 to length(ar) do write(ar[i],' ');end.Пример ввода:Daaaaaaaaaaaaaads.Пример вывода:Result:d s