import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] x = new int[5]; int[] y = new int[5]; for (int i = 0; i < 5; i++) { x[i] = sc.nextInt(); y[i] = sc.nextInt(); } int N = x.length; ArrayList list = new ArrayList<>(); int start = 0; // x座標のもっとも大きい点を始点にする for (int i = 1; i < N; i++) { if (x[start] < x[i]) start = i; } boolean[] used = new boolean[N]; used[start] = true; list.add(start); // Y軸の正の向きの単位ベクトル double[] prevDir = new double[2]; prevDir[0] = 0.0; prevDir[1] = 1.0; while (true) { int from = list.get(list.size() - 1); double max = -20000000.0; int next = -1; for (int to = 0; to < N; to++) { // 前のベクトルに対して最も内積が大きくなるように次の点を探す // そうすると、曲がり角を最大にすることが出来る double[] toDir = direction(x, y, from, to); double pro = product(prevDir, toDir); if (max == pro) { System.out.println("NO"); return; } if (max < pro) { max = pro; next = to; } } prevDir = direction(x, y, from, next); list.add(next); if (used[next]) { break; } used[next] = true; } if (list.size() == 6) { System.out.println("YES"); } else { System.out.println("NO"); } } static double[] direction(int[] X, int[] Y, int from, int to) { // fromからtoへの単位ベクトルを返す double dx = X[to] - X[from]; double dy = Y[to] - Y[from]; return new double[] { dx / Math.sqrt(dx * dx + dy * dy), dy / Math.sqrt(dx * dx + dy * dy) }; } static double product(double[] a, double[] b) { // ベクトル内積を返す return a[0] * b[0] + a[1] * b[1]; } }