func_code_string: #include <bits/stdc++.h>   struct point {     double x, y, z;     point() {}     point(double _x, double _y, double _z) : x(_x), y(_y), z(_z) {}   };   const double eps = 1e-8;   double vlen(point p) { return sqrt(p.x * p.x + p.y * p.y + p.z * p.z); }   point xmult(point u, point v) {     point ret;     ret.x = u.y * v.z - v.y * u.z;     ret.y = u.z * v.x - u.x * v.z;     ret.z = u.x * v.y - u.y * v.x;     return ret;   }   point subt(point u, point v) {     point ret;     ret.x = u.x - v.x;     ret.y = u.y - v.y;     ret.z = u.z - v.z;     return ret;   }   int dot_online_in(point p, point l1, point l2) {     return (((vlen(xmult(subt(p, l1), subt(p, l2)))) > 0                  ? (vlen(xmult(subt(p, l1), subt(p, l2))))                  : -(vlen(xmult(subt(p, l1), subt(p, l2))))) < eps) &&            (l1.x - p.x) * (l2.x - p.x) < eps &&            (l1.y - p.y) * (l2.y - p.y) < eps && (l1.z - p.z) * (l2.z - p.z) < eps;   }   double x[10001], y[10001], z[10001], d[10001];   int main() {     int n;     scanf( %d , &n);     for (int i = 0; i <= n; i++) scanf( %lf %lf %lf , &x[i], &y[i], &z[i]);     double vp, vs, px, py, pz;     scanf( %lf %lf , &vp, &vs);     scanf( %lf %lf %lf , &px, &py, &pz);     double lo = 0, hi = 0;     for (int i = 1; i <= n; i++) {       d[i] = sqrt((x[i] - x[i - 1]) * (x[i] - x[i - 1]) +                   (y[i] - y[i - 1]) * (y[i] - y[i - 1]) +                   (z[i] - z[i - 1]) * (z[i] - z[i - 1]));       hi += d[i] / vs;     }     if (hi * vp < sqrt((x[n] - px) * (x[n] - px) + (y[n] - py) * (y[n] - py) +                        (z[n] - pz) * (z[n] - pz)))       printf( NO n );     else {       double X = -1, Y = -1, Z = -1;       while ((hi - lo) >= 1e-10) {         double mid = (lo + hi) / 2;         double s = mid * vs;         for (int i = 1; i <= n; i++)           if (s > d[i])             s -= d[i];           else {             double t = s / d[i];             X = x[i - 1] + (x[i] - x[i - 1]) * t;             Y = y[i - 1] + (y[i] - y[i - 1]) * t;             Z = z[i - 1] + (z[i] - z[i - 1]) * t;             if (!dot_online_in(point(X, Y, Z),                                point(x[i - 1], y[i - 1], z[i - 1]),                                point(x[i], y[i], z[i]))) {               X = x[i - 1] - (x[i] - x[i - 1]) * t;               Y = y[i - 1] - (y[i] - y[i - 1]) * t;               Z = z[i - 1] - (z[i] - z[i - 1]) * t;             }             break;           }         if (mid * vp >=             sqrt((X - px) * (X - px) + (Y - py) * (Y - py) + (Z - pz) * (Z - pz)))           hi = mid;         else           lo = mid;       }       printf( YES n );       printf( %.10lf n , lo);       printf( %.10lf %.10lf %.10lf n , X, Y, Z);     }     return 0;   }   