Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

A Point in a Triangle

There is a triangle formed by three points $(x_1, y_1)$, $(x_2, y_2)$, $(x_3, y_3)$ on a plain.

Write a program which prints "YES" if a point $P$ $(x_p, y_p)$ is in the triangle and "NO" if not.

Input

Input consists of several datasets. Each dataset consists of:

$x_1$ $y_1$ $x_2$ $y_2$ $x_3$ $y_3$ $x_p$ $y_p$

All the input are real numbers. Input ends with EOF. The number of datasets is less than or equal to 100.

Constraints

You can assume that:

$ -100 \leq x_1, y_1, x_2, y_2, x_3, y_3, x_p, y_p \leq 100$

1.0 $\leq$ Length of each side of a tringle

0.001 $\leq$ Distance between $P$ and each side of a triangle

Output

For each dataset, print "YES" or "NO" in a line.

Sample Input

0.0 0.0 2.0 0.0 2.0 2.0 1.5 0.5
0.0 0.0 1.0 4.0 5.0 3.0 -1.0 3.0

Output for the Sample Input

YES
NO

Solution in C# (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;

namespace A_Point_in_Triangle
{
    class Cordinate 
    {
        public double X { get; set; }
        public double Y { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                string str = Console.ReadLine();
                if (string.IsNullOrEmpty(str))
                {
                    break;
                }
                var cordinates = new List<Cordinate>();
                var answer = "NO";
                var input = str.Split().Select(double.Parse).ToList();
                for (int i = 0; i <= 6; i+=2)
                {
                    cordinates.Add(new Cordinate()
                    {
                        X = input[0 + i],
                        Y = input[1 + i]
                    });
                }
                var pCordinate = cordinates[cordinates.Count - 1];
                cordinates.RemoveAt(cordinates.Count - 1);

                var minX = cordinates.Min(a => a.X);
                var maxX = cordinates.Max(a => a.X);
                var minY = cordinates.Min(a => a.Y);
                var maxY = cordinates.Max(a => a.Y);

                if (minX < pCordinate.X && maxX > pCordinate.X)
                {
                    if (minY < pCordinate.Y && maxY > pCordinate.Y)
                    {
                        answer = "YES";
                    }
                }
                Console.WriteLine(answer);
            }


        }
    }
}