#include <bits/stdc++.h>
using namespace std;
long double xl[2020], xr[2020], y[2020];
set<int> t[1111000];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  long double yl = 0;
  bool helppo = 1;
  long double vas = 1000000, oik = -1000000;
  for (int i = 1; i <= n; ++i) {
    int y1;
    cin >> xl[i] >> xr[i] >> y1;
    y[i] = y1;
    vas = min(vas, xl[i]);
    oik = max(oik, xr[i]);
    if (yl == 0)
      yl = y[i];
    else {
      if (yl != y[i]) helppo = 0;
    }
    t[y1].insert(i);
  }
  vector<pair<long double, long double>> kov, koo, koov, kooo;
  for (int i = 1; i <= 1e6; ++i) {
    if (t[i].size() != 0) {
      long double vas = 1000000, oik = -1000000;
      for (auto u : t[i]) {
        vas = min(vas, xl[u]);
        oik = max(oik, xr[u]);
      }
      kov.push_back({vas, i});
      koo.push_back({oik, i});
    }
  }
  for (auto u : kov) {
    int a = 0, b = 0;
    for (auto v : kov) {
      if (u.first > v.first && u.second > v.second) a = 1;
      if (u.first > v.first && u.second < v.second) b = 1;
    }
    if (a == 1 && b == 1) u.first = 1e9;
  }
  for (auto u : koo) {
    int a = 0, b = 0;
    for (auto v : koo) {
      if (u.first < v.first && u.second > v.second) a = 1;
      if (u.first < v.first && u.second < v.second) b = 1;
    }
    if (a == 1 && b == 1) u.first = -1e9;
  }
  for (auto u : kov) {
    if (u.first != 1e9) koov.push_back({u.first, u.second});
  }
  for (auto u : koo) {
    if (u.first != -1e9) kooo.push_back({u.first, u.second});
  }
  if (helppo) {
    cout << setprecision(15) << oik - vas << "\n";
    return 0;
  }
  set<pair<long double, long double>> s;
  s.insert({-1e15, 1e15});
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      if (y[j] < y[i]) {
        long double c = (xl[j] - xr[i]) / (y[i] - y[j]);
        long double d = (xr[j] - xl[i]) / (y[i] - y[j]);
        bool b1 = 1;
        auto it = s.lower_bound({d, -1e15});
        if (it == s.end()) it--;
        set<pair<long double, long double>> s1, s2;
        while (b1) {
          long double a = it->first, b = it->second;
          if (b >= d) {
            if (a < d) {
              if (a <= c) {
                s1.insert({a, b});
                s2.insert({a, c});
                s2.insert({d, b});
                b1 = 0;
              } else {
                s1.insert({a, b});
                s2.insert({d, b});
              }
            }
          } else {
            if (a > c) {
              s1.insert({a, b});
            } else {
              if (b > c) {
                s1.insert({a, b});
                s2.insert({a, c});
              }
              b1 = 0;
            }
          }
          if (it == s.begin())
            b1 = 0;
          else
            it--;
        }
        for (auto u : s1) s.erase({u.first, u.second});
        for (auto u : s2) s.insert({u.first, u.second});
      }
    }
  }
  long double ans = 1e18;
  auto it = s.lower_bound({0, 0});
  int b3 = 1;
  while (b3) {
    long double a = it->first, b = it->second, prevans = ans;
    long double vas = 1e15, oik = -1e15;
    for (auto u : koov) {
      vas = min(vas, u.first + (u.second) * a);
    }
    for (auto u : kooo) {
      oik = max(oik, u.first + (u.second) * a);
    }
    ans = min(ans, oik - vas);
    vas = 1e15, oik = -1e15;
    for (auto u : koov) {
      vas = min(vas, u.first + (u.second) * b);
    }
    for (auto u : kooo) {
      oik = max(oik, u.first + (u.second) * b);
    }
    ans = min(ans, oik - vas);
    if (ans == prevans) b3 = 0;
    it++;
    if (it == s.end()) b3 = 0;
  }
  long double fans = 1e18;
  it = s.lower_bound({0, 0});
  it--;
  b3 = 1;
  while (b3) {
    long double a = it->first, b = it->second, prevans = fans;
    long double vas = 1e15, oik = -1e15;
    for (auto u : koov) {
      vas = min(vas, u.first + (u.second) * a);
    }
    for (auto u : kooo) {
      oik = max(oik, u.first + (u.second) * a);
    }
    ans = min(ans, oik - vas);
    fans = min(fans, oik - vas);
    vas = 1e15, oik = -1e15;
    for (auto u : koov) {
      vas = min(vas, u.first + (u.second) * b);
    }
    for (auto u : kooo) {
      oik = max(oik, u.first + (u.second) * b);
    }
    ans = min(ans, oik - vas);
    fans = min(fans, oik - vas);
    if (fans == prevans) b3 = 0;
    if (it == s.begin())
      b3 = 0;
    else
      it--;
  }
  cout << setprecision(15) << ans << "\n";
}
