import math def det(p, q): return p[0]*q[1] - p[1]*q[0] def sub(p, q): return (p[0]-q[0], p[1]-q[1]) def get_convex_hull(points): # どの3点も直線上に並んでいないと仮定する。 n = len(points) points.sort() size_convex_hull = 0 ch = [] for i in range(n): while size_convex_hull > 1: v_cur = sub(ch[-1], ch[-2]) v_new = sub(points[i], ch[-2]) if det(v_cur, v_new) > 0: break size_convex_hull -= 1 ch.pop() ch.append(points[i]) size_convex_hull += 1 t = size_convex_hull for i in range(n-2, -1, -1): while size_convex_hull > t: v_cur = sub(ch[-1], ch[-2]) v_new = sub(points[i], ch[-2]) if det(v_cur, v_new) > 0: break size_convex_hull -= 1 ch.pop() ch.append(points[i]) size_convex_hull += 1 return ch[:-1] # 多角形の面積 * 2 (2をかけると必ず整数になる) def area(points): ans = 0 N = len(points) x0, y0 = points[N - 1] for i in range(N): x1, y1 = points[i] ans += (x0 - x1) * (y0 + y1) x0, y0 = x1, y1 return abs(ans) # 多角形の線分上の格子点の数の和 def all_points_ontotu(points): ans = 0 N = len(points) x0, y0 = points[N - 1] for i in range(N): x1, y1 = points[i] ans += points_online(x0, y0, x1, y1) - 1 x0, y0 = x1, y1 return ans # 線分上の格子点の数 def points_online(x0, y0, x1, y1): return math.gcd(abs(x0 - x1), abs(y0 - y1)) + 1 # 凸包に含まれる格子点の数 def inner_points(points): D = get_convex_hull(points) S2 = area(D) b = all_points_ontotu(D) # ピックの定理で凸包に含まれる格子点の数を求める ans = (S2 - b) // 2 + 1 ans += b # (辺上の格子点を含める) return ans N = int(input()) XY = [list(map(int, input().split())) for _ in range(N)] c = get_convex_hull(XY) if len(c) == N: print("Yes") else: print("No")