uses crt;
const
ds=['a'..'z',',','.'];
sg=['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'];
type mnoz=set of char;
var s,s1:string;
m:array[1..100] of mnoz;{массив множеств}
mn_ob,mn,mn1:mnoz;
n,i,j,k:byte;
begin
clrscr;
repeat
k:=0;
writeln('Введите текст из строчных латинских букв, между словами запятая, в конце точка:');
readln(s);
for i:=1 to length(s) do
if not(s[i] in ds) then
begin
k:=1;
break;
end;
if(s='')or(k=1)or(pos('.',s)=0) then writeln('Строка введена неверно');
until (s<>'')and(k=0)and(pos('.',s)>0);
s:=copy(s,1,pos('.',s)-1);{возьмем строку до первой точки}
s:=s+',';{добавим запятую}
mn_ob:=[];{множество согласных, которые есть в строке}
for i:=1 to length(s) do
if s[i] in sg then mn_ob:=mn_ob+[s[i]];
n:=0;
while pos(',',s)>0 do{создаем массив множеств}
begin
s1:=copy(s,1,pos(',',s)-1);{копируем очередное слово}
n:=n+1;{считаем}
m[n]:=[];{создаем множество}
for j:=1 to length(s1) do
if s1[j] in sg then m[n]:=m[n]+[s1[j]];{из его букв по условию}
delete(s,1,pos(',',s));{удаляем это слово}
end;
mn1:=[];{множество букв, входящих только в одно число}
for i:=1 to n do{для каждого множества }
begin
mn:=[];
for j:=1 to n do
if j<>i then mn:=mn+m[j];{делаем множество из букв, котoрые входят в другие числа}
mn1:=mn1+(m[i]-mn);{вычитаем из даннго множества общее множество
и остаток записываем в новое}
end;
if mn1=[] then writeln('Букв, которые входят только в одно число, нет!')
else
begin
writeln('Буквы, которые входят только в одно слово:');
for i:=98 to 122 do{коды от b до z, если буква есть по разу, выводим}
if chr(i) in mn1 then write(chr(i),' ');
end;
readln
end.