program strings;
uses crt;
const
zn = [' ', ',', '-', ':']; { промежуточные знаки }
ks = ['.', '!', '?']; { Знаки окончания строки }
var
f: text;
com, { Команда }
i, { для счёта }
min, { кол-во слов в самом коротком предложении }
count, { Кол-во слов в текущем предложении }
ps, { позиция начала текущего предложения }
nmin, { Начало минимального предложения }
lnmin: integer; { Длина минимального предложения }
txt: string; { полученный текст }
first: boolean; { указывает на то что предложение первое }
begin
readln(txt);
writeln('Исходный текст:');
writeln(txt);
writeln;
writeln('Результат:');
txt := ' ' + txt;
first := true;
while length(txt) > 0 do
begin
min := maxint;
ps := 1;
for i := 1 to length(txt) do
begin
if txt[i] in ks then
if min > count then
begin
nmin := ps;
lnmin := i - nmin + 1;
min := count;
count := 0;
ps := i + 1;
end
else
begin
ps := i + 1;
count := 0;
end
else if txt[i] in zn then
inc(count);
end;
if first then
begin
write(copy(txt, nmin + 1, lnmin));
first := false;
end
else
write(copy(txt, nmin, lnmin));
delete(txt, nmin, lnmin);
end;
end.