#include <bits/stdc++.h>
using namespace std;
using INT = long long;
struct point {
  INT x, y;
  int n;
  point(int x = 0, int y = 0) : x(x), y(y) {}
  point operator-(point a) { return point(x - a.x, y - a.y); }
  INT operator^(point a) { return 1LL * x * a.y - 1LL * y * a.x; }
  INT operator*(point a) { return 1LL * x * a.x + 1LL * y * a.y; }
  double nor() { return sqrt(*this * *this); }
  bool operator<(const point &a) const {
    if (x != a.x) return x < a.x;
    return y < a.y;
  }
  bool operator==(const point &a) const { return (x == a.x && y == a.y); }
  void input() { scanf("%d %d", &x, &y); }
  void print() { printf("%d %d\n", x, y); }
};
point st, ed, c[1100], d[1100];
double dist(point a, point x, point y) {
  double d = (y - x).nor();
  d = fabs(a - x ^ a - y) / d;
  if ((a - x) * (y - x) > 0 && (a - y) * (x - y) > 0) return d;
  return min((a - x).nor(), (a - y).nor());
}
double ddist(point a, point b, point x, point y) {
  double ans = dist(a, x, y);
  ans = min(ans, dist(b, x, y));
  ans = min(ans, dist(x, a, b));
  ans = min(ans, dist(y, a, b));
  return ans;
}
vector<pair<int, int> > adj[1100];
set<pair<int, int> > s;
int dis[1100];
void dijk() {
  while (!s.empty()) {
    int u = (*s.begin()).second;
    s.erase(*s.begin());
    for (auto p : adj[u]) {
      int v = p.first;
      int w = p.second;
      if (dis[v] > dis[u] + w) {
        s.erase(pair<int, int>(dis[v], v));
        dis[v] = dis[u] + w;
        s.insert(pair<int, int>(dis[v], v));
      }
    }
  }
}
int main() {
  int a, b;
  cin >> a >> b;
  st.input();
  ed.input();
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) c[i].input(), d[i].input();
  for (int i = 1; i <= n; i++) {
    double dd = dist(st, c[i], d[i]);
    if (dd < a + 1e-8) {
      adj[0].push_back(pair<int, int>(i, a + b));
      adj[i].push_back(pair<int, int>(0, a + b));
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i == j) continue;
      double dd = ddist(c[i], d[i], c[j], d[j]);
      if (dd < a + 1e-8) {
        adj[i].push_back(pair<int, int>(j, a + b));
      }
    }
  }
  for (int i = 0; i <= n; i++) dis[i] = 1e9;
  dis[0] = 0;
  for (int i = 0; i <= n; i++) {
    s.insert(pair<int, int>(dis[i], i));
  }
  dijk();
  double ans = 1e9;
  for (int i = 1; i <= n; i++) {
    double dd = dist(ed, c[i], d[i]);
    if (dd < a + 1e-8) ans = min(ans, dis[i] + dd);
  }
  if ((ed - st).nor() < a + 1e-8) ans = min(ans, (ed - st).nor());
  if (fabs(ans - 1e9) < 1e-8) {
    puts("-1");
    return 0;
  }
  printf("%.6lf\n", ans);
  return 0;
}
