program list;
type
PElement = ^Element;
Element = record
data: integer;
prev: PElement;
next: PElement;
end;
procedure list_create(var head: PElement; data: integer);
begin
new(head);
head^.data := data;
head^.next := head;
head^.prev := head;
end;
procedure list_appbeg(var head: PElement; data: integer);
var
p: PElement;
begin
new(p);
p^.data := data;
head^.prev^.next := p;
p^.prev := head^.prev;
head^.prev := p;
p^.next := head;
head := p;
end;
procedure list_print(head: PElement);
var
p: PElement;
begin
p := head;
repeat
writeln(p^.data);
p := p^.next;
until p = head;
end;
procedure search_middle(var head: PElement; var i:integer);
var
p: PElement;
begin
p := head^.next;
i := 1;
while p <> head do
begin
p := p^.next;
i := i+1;
end;
i := i div 2;
end;
procedure add_in_middle(var head:PElement; i:integer);
var
p, k: PElement;
poz: integer;
begin
p:= head;
for poz:=1 to i do
p := p^.next;
new(k);
writeln('Input data of new element:');
read(k^.data);
p^.next^.prev := k;
k := p^.next;
k^.prev:=p;
p^.next := k;
end;
var
head: PElement;
p: PElement;
data: integer;
i, num: integer;
action: integer;
begin
write('Enter data of first element: ');
read(data);
list_create(head, data);
writeln('Input number of element, which You want to add: ');
read(num);
writeln('Input data: ');
for i:=1 to num do
begin
read(data);
list_appbeg(head, data);
end;
writeln('Print result: ');
list_print(head);
search_middle(head, i);
add_in_middle(head, i);
list_print(head);
end.