Problem:
Score : 500 points

Problem Statement

There are N integers X_1, X_2, \cdots, X_N, and we know that A_i \leq X_i \leq B_i.
Find the number of different values that the median of X_1, X_2, \cdots, X_N can take.

Notes

The median of X_1, X_2, \cdots, X_N is defined as follows. Let x_1, x_2, \cdots, x_N be the result of sorting X_1, X_2, \cdots, X_N in ascending order.

If N is odd, the median is x_{(N+1)/2};

if N is even, the median is (x_{N/2} + x_{N/2+1}) / 2.

Constraints

2 \leq N \leq 2 \times 10^5

1 \leq A_i \leq B_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 B_1
A_2 B_2
:
A_N B_N

Output

Print the answer.

Sample Input 1

2
1 2
2 3

Sample Output 1

3

If X_1 = 1 and X_2 = 2, the median is \frac{3}{2};

if X_1 = 1 and X_2 = 3, the median is 2;

if X_1 = 2 and X_2 = 2, the median is 2;

if X_1 = 2 and X_2 = 3, the median is \frac{5}{2}.

Thus, the median can take three values: \frac{3}{2}, 2, and \frac{5}{2}.

Sample Input 2

3
100 100
10 10000
1 1000000000

Sample Output 2

9991

Solution in OCaml (4.10.0) (judge verdict: Wrong Answer)

(*
 * forall l r (p : forall n, l < n <= r -> bool),
 *   ( exists m,
 *     l < m <= r /\ forall n H, p n H = true <-> m <= n ) ->
 *   { m |
 *     l < m <= r /\ forall n H, p n H = true <-> m <= n }
 *)
let rec lower_bound l r p =
  if r <= 1 + l
  then r
  else let m = (l + r) / 2 in
       if p m
       then lower_bound l m p
       else lower_bound m r p

let rec upper_bound l r p =
  if r <= 1 + l
  then l
  else let m = (l + r) / 2 in
       if p m 
       then upper_bound m r p
       else upper_bound l m p

let () = Scanf.scanf "%d\n" @@ fun n ->
  let abs = Array.init n @@ fun _ -> Scanf.scanf "%d %d\n" @@ fun a b -> a, b in
  let r = 
    upper_bound 0 10000000000 @@ fun m ->
      (n + 1) / 2 <=
        Array.fold_left (fun acc (_, b) ->
          acc + if m <= b then 1 else 0) 0 abs in
  let l =
    lower_bound 0 10000000000 (fun m ->
      ( <= ) ((n + 1) / 2) @@
      Array.fold_left (fun acc (a, _) ->
        acc + if a <= m then 1 else 0) 0 abs) in
  Printf.printf "%d\n" @@
  if n mod 2 = 1
  then r - l + 1
  else
    2 * r
    - (if (n + 3) / 2 <=
      Array.fold_left (fun acc (_, b) ->
        acc + if r <= b then 1 else 0) 0 abs then 0 else 1)
    - 2 * l
    - (if (n + 3) / 2 <=
      Array.fold_left (fun acc (a, _) ->
        acc + if a <= l then 1 else 0) 0 abs then 0 else 1)
    + 1