#include <bits/stdc++.h>
using namespace std;
pair<int, int> a[1100][2];
vector<int> v[1100];
double dist(pair<int, int> x, pair<int, int> x1, pair<int, int> x2) {
  double res = sqrt(1.0 * (x1.first - x.first) * (x1.first - x.first) +
                    1.0 * (x1.second - x.second) * (x1.second - x.second));
  res = min(res, sqrt(1.0 * (x2.first - x.first) * (x2.first - x.first) +
                      1.0 * (x2.second - x.second) * (x2.second - x.second)));
  if (x1.first == x2.first &&
      ((x1.second >= x.second && x2.second <= x.second) ||
       (x1.second <= x.second && x2.second >= x.second))) {
    res = min(res, 1.0 * abs(x1.first - x.first));
  }
  if (x1.second == x2.second &&
      ((x1.first >= x.first && x2.first <= x.first) ||
       (x1.first <= x.first && x2.first >= x.first))) {
    res = min(res, 1.0 * abs(x1.second - x.second));
  }
  return res;
}
double d[1010];
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  cout.setf(ios::fixed);
  cout.precision(10);
  int t1, t2;
  cin >> t1 >> t2;
  pair<int, int> from, to;
  cin >> from.first >> from.second >> to.first >> to.second;
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i][0].first >> a[i][0].second >> a[i][1].first >> a[i][1].second;
  }
  set<pair<double, int>> q;
  for (int i = 0; i < n + 2; i++) {
    d[i] = 1e20;
    if (i != n) {
      q.insert({1e20, i});
    }
  }
  d[n] = 0;
  q.insert({0, n});
  while (!q.empty()) {
    auto x = *q.begin();
    if (x.second == n) {
      for (int i = 0; i < n; i++) {
        if (dist(from, a[i][0], a[i][1]) <= t1) {
          double dis = t1 + t2;
          if (dis < d[i]) {
            q.erase({d[i], i});
            d[i] = dis;
            q.insert({d[i], i});
          }
        }
      }
      if (dist(to, from, from) <= t1) {
        double dis = dist(to, from, from);
        if (dis + x.first < d[n + 1]) {
          q.erase({d[n + 1], n + 1});
          d[n + 1] = dis + x.first;
          q.insert({d[n + 1], n + 1});
        }
      }
    }
    if (x.second < n) {
      for (int i = 0; i < n; i++) {
        if (dist(a[x.second][0], a[i][0], a[i][1]) <= t1) {
          if (t1 + t2 + x.first < d[i]) {
            q.erase({d[i], i});
            d[i] = t1 + t2 + x.first;
            q.insert({d[i], i});
          }
        }
        if (dist(a[x.second][1], a[i][0], a[i][1]) <= t1) {
          if (t1 + t2 + x.first < d[i]) {
            q.erase({d[i], i});
            d[i] = t1 + t2 + x.first;
            q.insert({d[i], i});
          }
        }
        if (dist(a[i][0], a[x.second][0], a[x.second][1]) <= t1) {
          if (t1 + t2 + x.first < d[i]) {
            q.erase({d[i], i});
            d[i] = t1 + t2 + x.first;
            q.insert({d[i], i});
          }
        }
        if (dist(a[i][1], a[x.second][0], a[x.second][1]) <= t1) {
          if (t1 + t2 + x.first < d[i]) {
            q.erase({d[i], i});
            d[i] = t1 + t2 + x.first;
            q.insert({d[i], i});
          }
        }
      }
      if (dist(to, a[x.second][0], a[x.second][1]) <= t1) {
        double dis = dist(to, a[x.second][0], a[x.second][1]);
        if (dis + x.first < d[n + 1]) {
          q.erase({d[n + 1], n + 1});
          d[n + 1] = dis + x.first;
          q.insert({d[n + 1], n + 1});
        }
      }
    }
    if (x.second == n + 1) {
      if (x.first != 1e20) {
        cout << x.first;
      } else {
        cout << -1;
      }
    }
    q.erase(q.begin());
  }
  return 0;
}
