#include <bits/stdc++.h>
using namespace std;
using namespace std;
double minDis(pair<double, double> A, pair<double, double> B,
              pair<double, double> E) {
  pair<double, double> AB;
  AB.first = B.first - A.first;
  AB.second = B.second - A.second;
  pair<double, double> BE;
  BE.first = E.first - B.first;
  BE.second = E.second - B.second;
  pair<double, double> AE;
  AE.first = E.first - A.first, AE.second = E.second - A.second;
  double AB_BE, AB_AE;
  AB_BE = (AB.first * BE.first + AB.second * BE.second);
  AB_AE = (AB.first * AE.first + AB.second * AE.second);
  double reqAns = 0;
  if (AB_BE > 0) {
    double y = E.second - B.second;
    double x = E.first - B.first;
    reqAns = sqrt(x * x + y * y);
  } else if (AB_AE < 0) {
    double y = E.second - A.second;
    double x = E.first - A.first;
    reqAns = sqrt(x * x + y * y);
  } else {
    double x1 = AB.first;
    double y1 = AB.second;
    double x2 = AE.first;
    double y2 = AE.second;
    double mod = sqrt(x1 * x1 + y1 * y1);
    reqAns = abs(x1 * y2 - y1 * x2) / mod;
  }
  return reqAns;
}
vector<vector<pair<long long int, double>>> adj(1005);
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long int t, i, j, l, r, f, e, x, y, mid, z, w, d, c, b, q, n, m, h, a;
  long long int t1, t2, t3, ans = 0, tc;
  cin >> a >> b;
  long long int x1, y1;
  cin >> x >> y >> x1 >> y1;
  cin >> n;
  long long int trench[n][4];
  for (i = 0; i < n; ++i) {
    for (j = 0; j < 4; ++j) cin >> trench[i][j];
  }
  for (i = 0; i < n; ++i) {
    pair<double, double> A = make_pair(trench[i][0], trench[i][1]);
    pair<double, double> B = make_pair(trench[i][2], trench[i][3]);
    for (j = i + 1; j < n; ++j) {
      double h1;
      pair<double, double> C = make_pair(trench[j][0], trench[j][1]);
      pair<double, double> D = make_pair(trench[j][2], trench[j][3]);
      h1 = min(minDis(A, B, C),
               min(minDis(A, B, D), min(minDis(D, C, B), minDis(D, C, A))));
      if (h1 <= a) {
        h1 = a;
        adj[i + 1].push_back({j + 1, h1});
        adj[j + 1].push_back({i + 1, h1});
      }
    }
    pair<double, double> C = make_pair(x, y);
    double h1;
    h1 = minDis(A, B, C);
    if (h1 <= a) {
      h1 = a;
      adj[i + 1].push_back({0, h1});
      adj[0].push_back({i + 1, h1});
    }
    pair<double, double> D = make_pair(x1, y1);
    h1 = minDis(A, B, D);
    if (h1 <= a) {
      adj[i + 1].push_back({n + 1, h1});
      adj[n + 1].push_back({i + 1, h1});
    }
  }
  double dist[n + 5];
  for (i = 0; i < n + 5; ++i) dist[i] = 1e18;
  dist[0] = 0;
  set<pair<double, long long int>> s;
  s.insert({0, 0});
  double ans1 = 1e18;
  double h2 = sqrt(((x - x1) * (x - x1)) + (y - y1) * (y - y1));
  if (h2 <= a) ans1 = min(h2, ans1);
  while (!s.empty()) {
    auto u = *s.begin();
    s.erase(s.begin());
    for (auto v : adj[u.second]) {
      if (v.first == n + 1) {
        ans1 = min(ans1, dist[u.second] + v.second);
        continue;
      }
      if (dist[v.first] > dist[u.second] + v.second + b) {
        s.erase({dist[v.first], v.first});
        dist[v.first] = dist[u.second] + v.second + b;
        s.insert({dist[v.first], v.first});
      }
    }
  }
  if (ans1 != 1e18)
    cout << fixed << setprecision(12) << ans1;
  else
    cout << -1;
  return 0;
}
