# coding: utf-8 def signed_area(p1, p2, p3): '''符号付き面積を計算 ''' area = (((p2[0] - p1[0]) * (p3[1] - p1[1])) - ((p3[0] - p1[0]) * (p2[1] - p1[1]))) / 2 return area def convex_hull(p_list): '''グラハムの凸包走査 ''' p_sort = [] for i in p_list: p_sort.append(i[0]) # x座標が最小のものをリストの先頭に配置。 min_index = p_sort.index(min(p_sort)) min_p = p_list.pop(min_index) p_list.insert(0, min_p) # 座標最小の点と他の点との角度順にソート ソートアルゴリズムに選択の余地が有る。 p_length = len(p_list) count = 0 index = 0 while True: count += 1 index += 1 area_sign = signed_area(p_list[0], p_list[index], p_list[index + 1]) # 符号付き面積が負ならば点を入れ替え if area_sign < 0: p_list[index], p_list[index + 1] = p_list[index + 1], p_list[index] count = 0 if count == p_length - 1: break if index == p_length - 2: index = 0 # 凹部の点を削除する。 index = -1 count = 0 while True: index += 1 count += 1 area_sign = signed_area(p_list[index], p_list[index + 1], p_list[index + 2]) if area_sign < 0: del p_list[index + 1] count = 0 if count == len(p_list): break if index >= len(p_list) - 3: index = -1 return p_list N=int(input()) l = [] for _ in range(N): X,Y=map(int,input().split()) l.append((X,Y)) l = convex_hull(l) if len(l) != N: print("No") exit() for i in range(N-2): x,y = l[i] x1,y1 = l[i+1] x2,y2 = l[i+2] if (x1-x)*(y2-y1) == (y1-y)*(x2-x1): print("No") exit() print("Yes")