program les; const MAXN = 100000; type bod = record x, y : integer; end; var n : integer; body : array [1 .. MAXN] of bod; hranice, dobsah : integer; procedure nacti_vstup; var i : integer; begin readln (n); for i := 1 to n do readln (body[i].x, body[i].y); end; function nsd (n1, n2 : integer) : integer; var t : integer; begin if n1 > n2 then begin t := n1; n1 := n2; n2 := t; end; while n1 > 0 do begin t := n1; n1 := n2 mod n1; n2 := t; end; nsd := n2; end; function pocet_vnitrnich_bodu_usecky (a, b : bod) : integer; var dx, dy : integer; begin dx := abs (a.x - b.x); dy := abs (a.y - b.y); if (dx = 0) and (dy = 0) then pocet_vnitrnich_bodu_usecky := 0 else pocet_vnitrnich_bodu_usecky := nsd (dx, dy) - 1; end; function bodu_na_hranici : integer; var i, b : integer; begin b := n + pocet_vnitrnich_bodu_usecky (body[1], body[n]); for i := 1 to n - 1 do b := b + pocet_vnitrnich_bodu_usecky (body[i], body[i + 1]); bodu_na_hranici := b; end; function dvakrat_obsah_lichobeznika (a, b : bod) : integer; begin dvakrat_obsah_lichobeznika := (a.y + b.y) * (a.x - b.x); end; function dvakrat_obsah_mnohouhelnika : integer; var i, s : integer; begin s := dvakrat_obsah_lichobeznika (body[n], body[1]); for i := 1 to n - 1 do s := s + dvakrat_obsah_lichobeznika (body[i], body[i + 1]); dvakrat_obsah_mnohouhelnika := abs (s); end; begin nacti_vstup; hranice := bodu_na_hranici; dobsah := dvakrat_obsah_mnohouhelnika; writeln (1 + (dobsah + hranice) div 2); end.