program incl;

uses
  outstd,
  standard;

const
  maxlevel = 10;

var
  level: integer;
  f: array [1..maxlevel] of text;
  s: string;

  procedure txtinp(var f: text; fn: string);
  var
    code: word;
  begin
    assign(f,fn); reset(f);
    code := ioresult;
    if (code<>0) then begin
      warn('Cannot open '+fn+' for reading');
      dec(level)
    end
  end;

begin
  if (paramcount=0) then exit;

  level := 1;
  txtinp(f[level],paramstr(1));

  while (level>0) do begin
    while (level>0) and (eof(f[level])) do begin
      close(f[level]);
      dec(level)
    end;
    if (level>0) then begin
      readln(f[level],s);
      if (copy(s,1,3)=':r ') then begin
        if (level=maxlevel) then begin
          warn('Nesting too deep. Insertion ignored');
      	  writeln(stdout,s)
        end else begin
          inc(level);
          txtinp(f[level],copy(s,4,255))
        end
      end else writeln(stdout,s)
    end
  end;

  stop(0)
end.
