#include <bits/stdc++.h>
using namespace std;
int dist(int x1, int y1, int x2, int y2) {
  return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
}
int dist1(int x1, int y1, int x2, int y2, int x, int y) {
  if (x1 == x2) {
    if (x == x1) return min(dist(x1, y1, x, y), dist(x2, y2, x, y));
    if ((min(y1, y2) <= y) && (max(y1, y2) >= y)) return (x - x1) * (x - x1);
    return min(dist(x1, y1, x, y), dist(x2, y2, x, y));
  }
  if (y == y1) return min(dist(x1, y1, x, y), dist(x2, y2, x, y));
  if ((min(x1, x2) <= x) && (max(x1, x2) >= x)) return (y - y1) * (y - y1);
  return min(dist(x1, y1, x, y), dist(x2, y2, x, y));
}
int dist2(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
  int res;
  res = min(dist1(x1, y1, x2, y2, x3, y3), dist1(x1, y1, x2, y2, x4, y4));
  res = min(res, dist1(x3, y3, x4, y4, x1, y1));
  res = min(res, dist1(x3, y3, x4, y4, x2, y2));
  return res;
}
int main() {
  int a, b, n, i, ax, ay, bx, by, j, mn, pos;
  int xx1[1007], yy1[1007], xx2[1007], yy2[1007];
  bool used[1007], color[1007];
  double ans;
  int d[1007];
  cin >> a >> b;
  cin >> ax >> ay >> bx >> by;
  cin >> n;
  for (i = 1; i <= n; i++) {
    used[i] = color[i] = false;
    d[i] = 1000000007;
    cin >> xx1[i] >> yy1[i] >> xx2[i] >> yy2[i];
  }
  if (dist(ax, ay, bx, by) <= a * a) {
    ans = sqrt(dist(ax, ay, bx, by));
    printf("%.6f", ans);
    return 0;
  }
  for (i = 1; i <= n; i++) {
    if (dist1(xx1[i], yy1[i], xx2[i], yy2[i], ax, ay) <= a * a) {
      used[i] = true;
      d[i] = a + b;
    }
  }
  ans = -1;
  for (i = 1; i <= n; i++) {
    mn = 1000000007;
    pos = 0;
    for (j = 1; j <= n; j++) {
      if ((!used[j]) || (color[j])) continue;
      if (d[j] < mn) {
        mn = d[j];
        pos = j;
      }
    }
    if (mn == 1000000007) {
      printf("%.6f", ans);
      return 0;
    }
    for (j = 1; j <= n; j++) {
      if (j == pos) continue;
      if (dist2(xx1[pos], yy1[pos], xx2[pos], yy2[pos], xx1[j], yy1[j], xx2[j],
                yy2[j]) <= a * a) {
        d[j] = min(d[j], d[pos] + a + b);
        used[j] = true;
      }
    }
    color[pos] = true;
    if (dist1(xx1[pos], yy1[pos], xx2[pos], yy2[pos], bx, by) <= a * a) {
      if (ans < 0)
        ans = d[pos] +
              sqrt(dist1(xx1[pos], yy1[pos], xx2[pos], yy2[pos], bx, by));
      else
        ans = min(ans, d[pos] + sqrt(dist1(xx1[pos], yy1[pos], xx2[pos],
                                           yy2[pos], bx, by)));
    }
  }
  printf("%.6f", ans);
  return 0;
}
