#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1100;
const double INF = 10e9;
int a = 0, b = 0, n = 0;
int ax, ay, bx, by;
vector<pair<pair<int, int>, pair<int, int> > > ES;
vector<int> adj[MAXN];
int dotprod(pair<int, int> a, pair<int, int> b) {
  return a.first * b.first + a.second * b.second;
}
int crossprod(pair<int, int> a, pair<int, int> b) {
  return a.first * b.second - a.second * b.first;
}
double dist(pair<int, int> x, pair<int, int> y) {
  return sqrt(1. * (y.first - x.first) * (y.first - x.first) +
              (y.second - x.second) * (y.second - x.second));
}
pair<int, int> rest(pair<int, int> a, pair<int, int> b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
double dist(pair<pair<int, int>, pair<int, int> > e, pair<int, int> b) {
  if (dotprod(rest(e.second, e.first), rest(b, e.second)) > 0)
    return dist(e.second, b);
  if (dotprod(rest(e.first, e.second), rest(b, e.first)) > 0)
    return dist(e.first, b);
  pair<int, int> x = rest(e.second, e.first);
  pair<int, int> y = rest(b, e.first);
  double result = crossprod(x, y) / fabs(dist(e.first, e.second));
  return fabs(result);
}
double delta(int v, int u) {
  double result = 0;
  if (v != n) result = b;
  if (u == n + 1)
    result += dist(ES[v], make_pair(bx, by));
  else
    result += a;
  return result;
}
double D[MAXN];
void bfs(int r) {
  for (int i = 0; i <= n + 1; i++) D[i] = INF;
  D[r] = 0;
  queue<pair<int, int> > Q;
  D[r] = 0;
  Q.push(make_pair(0, r));
  while (!Q.empty()) {
    pair<int, int> v = Q.front();
    Q.pop();
    for (int i = 0; i < adj[v.second].size(); i++) {
      int u = adj[v.second][i];
      if (D[u] > D[v.second] + delta(v.second, u)) {
        D[u] = D[v.second] + delta(v.second, u);
        Q.push(make_pair(D[u], u));
      }
    }
  }
}
int main() {
  cin >> a >> b;
  cin >> ax >> ay >> bx >> by;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x1, y1, x2, y2;
    cin >> x1 >> y1 >> x2 >> y2;
    ES.push_back(make_pair(make_pair(x1, y1), make_pair(x2, y2)));
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i != j) {
        if (dist(ES[i], ES[j].first) <= (double)a ||
            dist(ES[i], ES[j].second) <= (double)a ||
            dist(ES[j], ES[i].first) <= (double)a ||
            dist(ES[j], ES[i].second) <= (double)a)
          adj[i].push_back(j);
      }
    }
    if (dist(ES[i], make_pair(ax, ay)) <= (double)a) {
      adj[n].push_back(i);
      adj[i].push_back(n);
    }
    if (dist(ES[i], make_pair(bx, by)) <= (double)a) {
      adj[n + 1].push_back(i);
      adj[i].push_back(n + 1);
    }
  }
  double result = dist(make_pair(ax, ay), make_pair(bx, by));
  if (result <= a)
    printf("%.9lf\n", result);
  else {
    bfs(n);
    if (D[n + 1] == INF) D[n + 1] = -1;
    printf("%.9lf\n", D[n + 1]);
  }
  return 0;
}
