#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
int main() {
  int n, k;
  int sza, szb;
  long double x1[2020];
  long double x2[2020];
  long double y[2020];
  long double xx, yy, zz;
  long double xxx, yyy;
  vector<pair<long double, long double> > a;
  pair<long double, long double> ma[2020];
  pair<long double, long double> mb[2020];
  long double s, ans;
  scanf("%d", &n);
  xxx = 10000000000;
  yyy = -10000000000;
  for (int i = 0; i < int(n); i++) {
    scanf("%Lf %Lf %Lf", &x1[i], &x2[i], &y[i]);
    if (xxx > x1[i]) xxx = x1[i];
    if (yyy < x2[i]) yyy = x2[i];
  }
  for (int i = 0; i < int(n); i++) {
    a.push_back({y[i], x2[i]});
  }
  sort(a.begin(), a.end());
  sza = 0;
  for (int i = 0; i < int(n); i++) {
    while (sza > 1) {
      if (abs(a[i].first - ma[sza - 1].first) < 0.1) {
        sza--;
      } else {
        xx = (ma[sza - 1].second - a[i].second) /
             (a[i].first - ma[sza - 1].first);
        yy = (ma[sza - 2].second - a[i].second) /
             (a[i].first - ma[sza - 2].first);
        if (xx < yy)
          sza--;
        else
          break;
      }
    }
    ma[sza] = a[i];
    sza++;
  }
  a.clear();
  for (int i = 0; i < int(n); i++) {
    a.push_back({y[i], x1[i]});
  }
  sort(a.begin(), a.end(), greater<pair<long double, long double> >());
  szb = 0;
  for (int i = 0; i < int(n); i++) {
    while (szb > 1) {
      if (abs(a[i].first - mb[szb - 1].first) < 0.1) {
        szb--;
      } else {
        xx = (mb[szb - 1].second - a[i].second) /
             (a[i].first - mb[szb - 1].first);
        yy = (mb[szb - 2].second - a[i].second) /
             (a[i].first - mb[szb - 2].first);
        if (xx < yy)
          szb--;
        else
          break;
      }
    }
    mb[szb] = a[i];
    szb++;
  }
  int sz, itra, itrb;
  vector<pair<long double, int> > c;
  for (int i = 0; i < int(n); i++) {
    for (int j = 0; j < int(i); j++) {
      if (abs(y[i] - y[j]) > 0.1) {
        xx = (x2[j] - x1[i]) / (y[i] - y[j]);
        yy = (x1[j] - x2[i]) / (y[i] - y[j]);
        if (xx > yy) swap(xx, yy);
        c.push_back({xx + 0.00000000000001, 1});
        c.push_back({yy - 0.00000000000001, -1});
      }
    }
  }
  int cur = 0;
  sort(c.begin(), c.end());
  sz = c.size();
  itra = 0;
  itrb = 0;
  ans = 1000000000000000000;
  if (sz == 0) {
    ans = yyy - xxx;
  }
  for (int i = 0; i < int(sz); i++) {
    if (cur <= 1) {
      while (itra < (sza - 1)) {
        xx = ma[itra].first * c[i].first + ma[itra].second;
        yy = ma[itra + 1].first * c[i].first + ma[itra + 1].second;
        if (xx > yy)
          break;
        else
          itra++;
      }
      while (itrb < (szb - 1)) {
        xx = mb[itrb].first * c[i].first + mb[itrb].second;
        yy = mb[itrb + 1].first * c[i].first + mb[itrb + 1].second;
        if (xx < yy)
          break;
        else
          itrb++;
      }
    }
    if (cur == 0) {
      xx = ma[itra].first * c[i].first + ma[itra].second;
      yy = mb[itrb].first * c[i].first + mb[itrb].second;
      ans = min(ans, xx - yy);
    }
    cur += c[i].second;
    if (cur == 0) {
      xx = ma[itra].first * c[i].first + ma[itra].second;
      yy = mb[itrb].first * c[i].first + mb[itrb].second;
      ans = min(ans, xx - yy);
    }
  }
  printf("%.08Lf\n", ans);
  return 0;
}
