#include <bits/stdc++.h>
using namespace std;
int a, b;
int n;
complex<double> p1[1024], p2[1024];
double d[1024][1024];
int vis[1024];
inline double dot(const complex<double>& a, const complex<double>& b) {
  return real(conj(a) * b);
}
complex<double> projection(const complex<double>& l0, const complex<double>& l1,
                           const complex<double>& p) {
  if (norm(l0 - l1) < (1e-10)) return l0;
  double t = dot(p - l0, l0 - l1) / norm(l0 - l1);
  return l0 + t * (l0 - l1);
}
bool intersectSP(const complex<double>& s0, const complex<double>& s1,
                 const complex<double>& p) {
  return abs(s0 - p) + abs(s1 - p) - abs(s1 - s0) < (1e-10);
}
double distanceSP(const complex<double>& s0, const complex<double>& s1,
                  const complex<double>& p) {
  const complex<double> r = projection(s0, s1, p);
  if (intersectSP(s0, s1, r)) return abs(r - p);
  return min(abs(s0 - p), abs(s1 - p));
}
double distanceSS(const complex<double>& s0, const complex<double>& s1,
                  const complex<double>& t0, const complex<double>& t1) {
  return min(min(distanceSP(s0, s1, t0), distanceSP(s0, s1, t1)),
             min(distanceSP(t0, t1, s0), distanceSP(t0, t1, s1)));
}
double solve() {
  for (int i = 0; i < (int)(n); i++)
    for (int j = 0; j < (int)(i); j++) {
      d[i][j] = d[j][i] = distanceSS(p1[i], p2[i], p1[j], p2[j]);
    }
  queue<pair<double, int> > q;
  q.push(make_pair(0.0, 0));
  vis[0] = 1;
  double ans = -1;
  while (!q.empty()) {
    const pair<double, int> vv(q.front());
    q.pop();
    const double t = -vv.first;
    const int at = vv.second;
    if (ans >= 0 && t >= ans) break;
    for (int i = 0; i < (int)(n); i++)
      if (vis[i] == 0 && d[at][i] <= a) {
        if (i == 1) {
          const double nt = t + d[at][i];
          if (ans == -1 || ans > nt) ans = nt;
        } else {
          vis[i] = 1;
          q.push(make_pair(-t - a - b, i));
        }
      }
  }
  return ans;
}
int main() {
  scanf("%d%d", &a, &b);
  for (int i = 0; i < (int)(2); i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    p1[i] = p2[i] = complex<double>(x, y);
  }
  scanf("%d", &n);
  for (int i = 0; i < (int)(n); i++) {
    int x1, y1, x2, y2;
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
    p1[i + 2] = complex<double>(x1, y1);
    p2[i + 2] = complex<double>(x2, y2);
  }
  n += 2;
  const double ans = solve();
  if (ans < 0)
    printf("%d\n", -1);
  else
    printf("%.9f\n", ans);
  return 0;
}
