← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

const OFFSET = 200005
const MAX_V = 400020

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(reader, &n); err != nil {
		return
	}

	type Point struct {
		u, v int
	}

	var S0, S1 []Point

	for i := 0; i < n; i++ {
		var x, y int
		fmt.Fscan(reader, &x, &y)
		u := x + y
		v := x - y
		p := (u%2 + 2) % 2
		if p == 0 {
			S0 = append(S0, Point{u, v})
		} else {
			S1 = append(S1, Point{u, v})
		}
	}

	ans := int64(0)

	for p := 0; p <= 1; p++ {
		var S []Point
		if p == 0 {
			S = S1 
		} else {
			S = S0 
		}

		if len(S) == 0 {
			continue
		}

		min_v_in_S := int(1e9)
		max_v_in_S := int(-1e9)

		max_u := make([]int, MAX_V)
		min_u := make([]int, MAX_V)
		for i := 0; i < MAX_V; i++ {
			max_u[i] = -1e9
			min_u[i] = 1e9
		}

		for _, pt := range S {
			v_idx := pt.v + OFFSET
			if pt.v < min_v_in_S {
				min_v_in_S = pt.v
			}
			if pt.v > max_v_in_S {
				max_v_in_S = pt.v
			}
			if pt.u > max_u[v_idx] {
				max_u[v_idx] = pt.u
			}
			if pt.u < min_u[v_idx] {
				min_u[v_idx] = pt.u
			}
		}

		max_u_below := make([]int, MAX_V)
		min_u_below := make([]int, MAX_V)
		max_u_above := make([]int, MAX_V)
		min_u_above := make([]int, MAX_V)

		max_u_below[0] = max_u[0]
		min_u_below[0] = min_u[0]
		for i := 1; i < MAX_V; i++ {
			max_u_below[i] = max(max_u_below[i-1], max_u[i])
			min_u_below[i] = min(min_u_below[i-1], min_u[i])
		}

		max_u_above[MAX_V-1] = max_u[MAX_V-1]
		min_u_above[MAX_V-1] = min_u[MAX_V-1]
		for i := MAX_V - 2; i >= 0; i-- {
			max_u_above[i] = max(max_u_above[i+1], max_u[i])
			min_u_above[i] = min(min_u_above[i+1], min_u[i])
		}

		for v := min_v_in_S + 1; v < max_v_in_S; v++ {
			if (v%2+2)%2 != p {
				continue
			}

			v_idx := v + OFFSET

			R1 := max_u_above[v_idx+1]
			R2 := max_u_below[v_idx-1]
			L1 := min_u_above[v_idx+1]
			L2 := min_u_below[v_idx-1]

			R := min(R1, R2)
			L := max(L1, L2)

			if R > L {
				ans += int64((R - L) / 2)
			}
		}
	}

	fmt.Println(ans)
}