#include <bits/stdc++.h>
using namespace std;
double pointDist(double x1, double y1, double x2, double y2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
double pointLineDist(double x1, double y1, double x2, double y2, double x3,
                     double y3) {
  double u = ((x3 - x1) * (x2 - x1) + (y3 - y1) * (y2 - y1)) /
             (pointDist(x1, y1, x2, y2) * pointDist(x1, y1, x2, y2));
  if (u > 1) u = 1;
  if (u < 0) u = 0;
  double x = x1 + u * (x2 - x1);
  double y = y1 + u * (y2 - y1);
  double res = pointDist(x, y, x3, y3);
  return res;
}
double lineDist(double x1, double y1, double x2, double y2, double x3,
                double y3, double x4, double y4) {
  double res = 1e18;
  res = min(res, pointLineDist(x1, y1, x2, y2, x3, y3));
  res = min(res, pointLineDist(x1, y1, x2, y2, x4, y4));
  res = min(res, pointLineDist(x3, y3, x4, y4, x1, y1));
  res = min(res, pointLineDist(x3, y3, x4, y4, x2, y2));
  return res;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long a, b;
  cin >> a >> b;
  long long ax, ay, bx, by;
  cin >> ax >> ay >> bx >> by;
  long long n;
  cin >> n;
  vector<pair<long long, long long>> adj[n * 2 + 5];
  double x1[n + 1], y1[n + 1], x2[n + 1], y2[n + 1];
  for (long long i = 1; i <= n; i++) {
    cin >> x1[i] >> y1[i] >> x2[i] >> y2[i];
  }
  for (long long u = 1; u <= n; u++) {
    for (long long v = 1; v <= n; v++) {
      double d =
          lineDist(x1[u], y1[u], x2[u], y2[u], x1[v], y1[v], x2[v], y2[v]);
      if (d <= a) {
        adj[u].push_back({v + n, a});
      }
    }
    adj[u + n].push_back({u, b});
    double d = pointLineDist(x1[u], y1[u], x2[u], y2[u], ax, ay);
    if (d <= a) {
      adj[0].push_back({u + n, a});
    }
  }
  priority_queue<pair<long long, long long>> pq;
  long long dist[n * 2 + 5];
  for (long long i = 0; i < n * 2 + 5; i++) dist[i] = 1e18;
  pq.push({0, 0});
  dist[0] = 0;
  while (!pq.empty()) {
    pair<long long, long long> p = pq.top();
    pq.pop();
    long long d = -p.first;
    long long u = p.second;
    if (d > dist[u]) continue;
    for (pair<long long, long long> e : adj[u]) {
      long long v = e.first;
      long long c = e.second;
      if (dist[u] + c < dist[v]) {
        dist[v] = dist[u] + c;
        pq.push({-dist[v], v});
      }
    }
  }
  double res = 1e18;
  for (long long u = 1; u <= n; u++) {
    double d = pointLineDist(x1[u], y1[u], x2[u], y2[u], bx, by);
    if (d <= a) {
      res = min(res, dist[u] + d);
    }
  }
  if (pointDist(ax, ay, bx, by) <= a) res = pointDist(ax, ay, bx, by);
  if (res != 1e18)
    cout << fixed << setprecision(9) << res << '\n';
  else
    cout << "-1\n";
}
