#include #include #include #include #include #include #include using namespace std; struct P { double inner(const P& p) const { double t = 0; for (int i = 0; i < 3; i++) { t += x[i] * p.x[i]; } return t; } P& operator-=(const P& p) { for (int i = 0; i < 3; i++) { x[i] -= p.x[i]; } return *this; } P& operator*=(const double t) { for (int i = 0; i < 3; i++) { x[i] *= t; } return *this; } double x[3]; }; int main() { P p[4]; for (int i = 0; i < 4; i++) { cin >> p[i].x[0] >> p[i].x[1] >> p[i].x[2]; } for (int i = 0; i < 4; i++) { if (i != 2) p[i] -= p[2]; } p[2] -= p[2]; double r[2], s[2]; for (int i = 0; i < 2; i++) { hoge: double t0 = p[i].inner(p[i]); double t1 = p[i].inner(p[3]); r[i] = sqrt(t0); s[i] = t1 / r[i]; if (i == 0 && s[i] == 0) { swap(p[0], p[1]); goto hoge; } if (i == 0) p[3] -= (p[0] *= s[0] / r[0]); } cout << ((s[0] / r[0] + s[1] / r[1] < 1 && s[0] > 0 && s[1] > 0) ? "YES" : "NO") << endl; return 0; }