#include <bits/stdc++.h>   #pragma GCC optimize( O3 )   using namespace std;   using ll = long long;   using ld = long double;   using pii = pair<int, int>;   using vi = vector<int>;   const ld EPS = 1E-9;   struct pt {     ld x, y;   };   struct seg {     pt p, q;     int id;     ld get_y(ld x) const {       if (abs(p.x - q.x) < EPS) return p.y;       return p.y + (q.y - p.y) * (x - p.x) / (q.x - p.x);     }   };   inline bool intersect1d(ld l1, ld r1, ld l2, ld r2) {     if (l1 > r1) swap(l1, r1);     if (l2 > r2) swap(l2, r2);     return max(l1, l2) <= min(r1, r2) + EPS;   }   inline int vec(const pt& a, const pt& b, const pt& c) {     ld s = (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);     return abs(s) < EPS ? 0 : s > 0 ? +1 : -1;   }   bool intersect(const seg& a, const seg& b) {     return intersect1d(a.p.x, a.q.x, b.p.x, b.q.x) &&            intersect1d(a.p.y, a.q.y, b.p.y, b.q.y) &&            vec(a.p, a.q, b.p) * vec(a.p, a.q, b.q) <= 0 &&            vec(b.p, b.q, a.p) * vec(b.p, b.q, a.q) <= 0;   }   bool operator<(const seg& a, const seg& b) {     ld x = max(min(a.p.x, a.q.x), min(b.p.x, b.q.x));     return a.get_y(x) < b.get_y(x) - EPS;   }   struct event {     ld x;     int tp, id;     event() {}     event(ld x, int tp, int id) : x(x), tp(tp), id(id) {}     bool operator<(const event& e) const {       if (abs(x - e.x) > EPS) return x < e.x;       return tp > e.tp;     }   };   set<seg> s;   vector<set<seg>::iterator> where;   inline set<seg>::iterator prev(set<seg>::iterator it) {     return it == s.begin() ? s.end() : --it;   }   inline set<seg>::iterator next(set<seg>::iterator it) { return ++it; }   pair<int, int> solve(const vector<seg>& a) {     int n = (int)a.size();     vector<event> e;     for (int i = 0; i < n; ++i) {       e.push_back(event(min(a[i].p.x, a[i].q.x), +1, i));       e.push_back(event(max(a[i].p.x, a[i].q.x), -1, i));     }     sort(e.begin(), e.end());     s.clear();     where.resize(a.size());     for (size_t i = 0; i < e.size(); ++i) {       int id = e[i].id;       if (e[i].tp == +1) {         set<seg>::iterator nxt = s.lower_bound(a[id]), prv = prev(nxt);         if (nxt != s.end() && intersect(*nxt, a[id]))           return make_pair(nxt->id, id);         if (prv != s.end() && intersect(*prv, a[id]))           return make_pair(prv->id, id);         where[id] = s.insert(nxt, a[id]);       } else {         set<seg>::iterator nxt = next(where[id]), prv = prev(where[id]);         if (nxt != s.end() && prv != s.end() && intersect(*nxt, *prv))           return make_pair(prv->id, nxt->id);         s.erase(where[id]);       }     }     return make_pair(-1, -1);   }   int main() {     ios::sync_with_stdio(0), cin.tie(0);     int n;     cin >> n;     vector<pt> S(n), V(n);     vi U(n);     for (int i = 0; i < n; i++) {       cin >> S[i].x >> S[i].y >> V[i].x >> V[i].y >> U[i];       ld len = sqrt(V[i].x * V[i].x + V[i].y * V[i].y);       V[i].x /= len;       V[i].y /= len;       V[i].x *= U[i];       V[i].y *= U[i];     }     ld lf = 0, rg = 1e12;     {       ld md = rg;       vector<seg> a(n);       for (int i = 0; i < n; i++) {         a[i].id = i;         a[i].p = S[i];         ld X = S[i].x + V[i].x * md;         ld Y = S[i].y + V[i].y * md;         a[i].q = {X, Y};       }       if (solve(a) == make_pair(-1, -1)) {         cout <<  No show :( ;         return 0;       }     }     const ld _eps = 1e-8;     while ((rg - lf) > _eps) {       ld md = (lf + rg) / 2;       vector<seg> a(n);       for (int i = 0; i < n; i++) {         a[i].id = i;         a[i].p = S[i];         ld X = S[i].x + V[i].x * md;         ld Y = S[i].y + V[i].y * md;         a[i].q = {X, Y};       }       if (solve(a) != make_pair(-1, -1)) {         rg = md;       } else {         lf = md;       }     }     cout.precision(10);     cout << fixed << (lf + rg) / 2;   }   