Ответ: PascalABC.NET 3.4.2, сборка 1863 от 10.11.2018Внимание! Если программа не работает, обновите версию!
begin
var N, A, B, C, D: integer;
Readln(N, A, B, C, D);
if A > C then (A, B, C, D) := (C, D, B, A);
var s := 1.To(A — 1);
if B < C then // ( ) [ ]
s := s + B.Downto(A) + (B + 1).To(C — 1) +
D.Downto(C) + (D + 1).To(N)
else
if D < B then // ( [ ] )
begin
s := s + SeqGen(C — A, t -> B — t) +
SeqGen(D — C + 1, t -> t + A + B — D) +
SeqGen(B — D, t -> A — t + B — D — 1) + (B + 1).To(N)
end
else // ( [ ) ]
begin
s := s + SeqGen(C — A, t -> B — t) +
SeqGen(D — B, t -> D — t) + SeqGen(B — C + 1, t -> A + t) +
(D + 1).To(N);
end;
s.Println;
end.