#include <bits/stdc++.h>
using namespace std;
using namespace std::chrono;
using ll = long long;
using ld = long double;
using pt = complex<ld>;
constexpr ld EPS = 1e-9;
ld cross(pt a, pt b) { return imag(conj(a) * b); }
ld cross(pt p, pt a, pt b) { return cross(a - p, b - p); }
int orientation(pt a, pt b, pt c) {
  ld orien = cross(b - a, c - a);
  return (orien > EPS) - (orien < -EPS);
}
bool lineSegmentIntersection(pt a, pt b, pt c, pt d) {
  if (orientation(a, b, c) == 0 && orientation(a, b, d) == 0) {
    ld dist = abs(a - b);
    return (abs(a - c) <= dist && abs(b - c) <= dist) ||
           (abs(a - d) <= dist && abs(b - d) <= dist);
  }
  return orientation(a, b, c) * orientation(a, b, d) <= 0 &&
         orientation(c, d, a) * orientation(c, d, b) <= 0;
}
struct seg {
  pt a, b;
  ll id;
  bool operator<(const seg& o) const {
    if (real(a) < real(o.a)) {
      ld s = cross(a, b, o.a);
      return (s > EPS || (abs(s) <= EPS && imag(a) < imag(o.a)));
    } else if (real(a) > real(o.a)) {
      ld s = cross(o.a, o.b, a);
      return (s < EPS || (abs(s) <= EPS && imag(a) < imag(o.a)));
    }
    return imag(a) < imag(o.a);
  }
};
struct event {
  pt p;
  ll id, type;
  bool operator<(const event& o) const {
    if (real(p) != real(o.p)) return real(p) < real(o.p);
    if (type != o.type) return type > o.type;
    return imag(p) < imag(o.p);
  }
};
bool lessPs(const pt& a, const pt& b) {
  if (real(a) != real(b)) return real(a) < real(b);
  return imag(a) < imag(b);
}
bool intersect(const seg& a, const seg& b) {
  return lineSegmentIntersection(a.a, a.b, b.a, b.b);
}
pair<int, int> intersect(const vector<seg>& s) {
  ll n = (ll)(s).size();
  vector<event> e;
  e.reserve(2 * n);
  for (ll i = 0; i < n; i++) {
    e.push_back({s[i].a, i, 1});
    e.push_back({s[i].b, i, -1});
  }
  sort(begin(e), end(e));
  set<seg> q;
  for (ll i = 0; i < n * 2; i++) {
    ll id = e[i].id;
    if (e[i].type == 1) {
      auto it = q.lower_bound(s[id]);
      if (it != q.end() && intersect(*it, s[id])) return {it->id, s[id].id};
      if (it != q.begin() && intersect(*prev(it), s[id]))
        return {it->id, s[id].id};
      q.insert(s[id]);
    } else {
      auto it = q.lower_bound(s[id]), next = it, prev = it;
      if (it != q.begin() && it != --q.end()) {
        ++next, --prev;
        if (intersect(*next, *prev)) return {next->id, prev->id};
      }
      q.erase(it);
    }
  }
  return {-1, -1};
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  ll n;
  cin >> n;
  vector<pt> p(n), d(n);
  for (ll i = 0; i < n; i++) {
    ll x, y, dx, dy, s;
    cin >> x >> y >> dx >> dy >> s;
    p[i] = {(ld)x, (ld)y};
    d[i] = {(ld)dx, (ld)dy};
    d[i] /= abs(d[i]);
    d[i] *= s;
  }
  ld l = 0;
  ld r = 1e10 + 10;
  vector<seg> segs(n);
  for (ll i = 0; i < 100; i++) {
    ld mid = (l + r) / 2;
    for (ll j = 0; j < n; j++) {
      segs[j] = {p[j], p[j] + mid * d[j], j};
      if (lessPs(segs[j].b, segs[j].a)) swap(segs[j].b, segs[j].a);
    }
    if (intersect(segs).first >= 0) {
      r = mid;
    } else {
      l = mid;
    }
  }
  if (r > 1e10) {
    cout << "No show :(" << endl;
  } else {
    cout << fixed << setprecision(10) << l << endl;
  }
}
