using System; using System.IO; using System.Linq; using System.Collections.Generic; class Program { static int[] dx = new int[] { 0, 0, 1, -1 }; static int[] dy = new int[] { 1, -1, 0, 0 }; static void Solve() { var n = sc.Int(); var x = sc.Int(); var y = sc.Int(); var ans = y - x; for (int i = 1; i < n; i++) { x = sc.Int(); y = sc.Int(); if (y - x != ans) { ans = -1; break; } } if (ans <= 0) ans = -1; pr.WriteLine(ans); } static int[,] Mul(int[,] a, int[,] b) { const int d = 2; var ret = new int[d, d]; for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) { for (int k = 0; k < d; k++) { ret[i, j] += a[i, k] * a[k, j]; } } } return ret; } class Coord { public int x; public int y; } static void Main(string[] args) { // pr.AutoFlush = true; Solve(); pr.Flush(); } static Scanner sc = new Scanner(); static Printer pr = new Printer(); } #region IO class Scanner { private int _i = 0; private string[] line = new string[0]; private T[] Enumerate(int n, Func f) { T[] ret = new T[n]; for (int i = 0; i < n; i++) ret[i] = f(); return ret; } public string Str() { if (line.Length <= _i) { line = Console.ReadLine().Split(' '); _i = 0; } return line[_i++]; } public int Int() => int.Parse(Str()); public long Long() => long.Parse(Str()); public double Double() => double.Parse(Str()); public int[] Int(int n) => Enumerate(n, Int); public long[] Long(int n) => Enumerate(n, Long); public double[] Double(int n) => Enumerate(n, Double); public string[] Str(int n) => Enumerate(n, Str); } class Printer : StreamWriter { public Printer() : base(Console.OpenStandardOutput()) { AutoFlush = false; } } #endregion