procedure p1(var x : integer);
  begin
    writeln('beginning of p1 ',x);
    x := x + 4;
    writeln('end of p1 ',x);
  end;

procedure p2(var x : integer);
  begin
    writeln('beginning of p2 ',x);
    x := x + 1;
    writeln('in p2, before calling p1 ',x);
    p1(x);
    writeln('in p2, after calling p1 ',x);
    writeln('end of p2 ',x)
  end;

var
  x : integer;

begin
  x := 0;
  writeln('beginning of main ',x);
  p2(x);
  writeln('end of main ',x)
end.

