program example;
var
c: char;
n, m: integer;
template: string;
begin
n := 1;
while not eof do
begin
read(c);
template[n] := c;
if c = #10 then
begin
for m := 1 to n - 1 do
begin
writeln(template[m], #9, m);
end;
end;
n := n + 1;
end;
writeln(template[3]);
writeln(length(template));
end. {$H+} тип string является алиасом на тип ShortString, который хранит длину строки в символе с индексом ноль. Максимальная длина для ShortString равна 255.Length правильно работала для ShortString, длину строки нужно задавать функцией SetLength - в самом начале процедуры добавьте вызов setlength(template, 255);n-1 - можно использовать это значение;{H+} или объявить строку как AnsiString и увеличивать длину строки динамически. Перед записью в строку на каждой итерации дабавьте: setlength(template, length(template) + 1); - тогда вызов length(template) вернёт нужное значение.