#include <bits/stdc++.h>
using namespace std;
inline long long int in() {
  long long int p = 0;
  register char ch = 0;
  while (ch < '0' or ch > '9') {
    ch = getchar();
  }
  while (ch >= '0' and ch <= '9') {
    p = (p << 1) + (p << 3) + ch - '0';
    ch = getchar();
  }
  return p;
}
const long long int MAXN = 1100;
const double INF = 10e9;
long long int a = 0, b = 0, n = 0;
long long int ax, ay, bx, by;
vector<pair<pair<long long int, long long int>,
            pair<long long int, long long int>>>
    ES;
vector<long long int> adj[MAXN];
long long int dotprod(pair<long long int, long long int> a,
                      pair<long long int, long long int> b) {
  return a.first * b.first + a.second * b.second;
}
long long int crossprod(pair<long long int, long long int> a,
                        pair<long long int, long long int> b) {
  return a.first * b.second - a.second * b.first;
}
double dist(pair<long long int, long long int> x,
            pair<long long int, long long int> y) {
  return sqrt(1. * (y.first - x.first) * (y.first - x.first) +
              (y.second - x.second) * (y.second - x.second));
}
pair<long long int, long long int> rest(pair<long long int, long long int> a,
                                        pair<long long int, long long int> b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
double dist(
    pair<pair<long long int, long long int>, pair<long long int, long long int>>
        e,
    pair<long long int, long long 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<long long int, long long int> x = rest(e.second, e.first);
  pair<long long int, long long int> y = rest(b, e.first);
  double result = crossprod(x, y) / fabs(dist(e.first, e.second));
  return fabs(result);
}
double delta(long long int v, long long 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(long long int r) {
  for (long long int i = 0; i <= n + 1; i++) D[i] = INF;
  D[r] = 0;
  queue<pair<long long int, long long int>> Q;
  D[r] = 0;
  Q.push(make_pair(0, r));
  while (!Q.empty()) {
    pair<long long int, long long int> v = Q.front();
    Q.pop();
    for (long long int i = 0; i < adj[v.second].size(); i++) {
      long long 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() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> a >> b;
  cin >> ax >> ay >> bx >> by;
  cin >> n;
  for (long long int i = 0; i < n; i++) {
    long long int x1, y1, x2, y2;
    cin >> x1 >> y1 >> x2 >> y2;
    ES.push_back(make_pair(make_pair(x1, y1), make_pair(x2, y2)));
  }
  for (long long int i = 0; i < n; i++) {
    for (long long 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], {ax, ay}) <= (double)a) {
      adj[n].push_back(i);
      adj[i].push_back(n);
    }
    if (dist(ES[i], {bx, by}) <= (double)a) {
      adj[n + 1].push_back(i);
      adj[i].push_back(n + 1);
    }
  }
  double result = dist({ax, ay}, {bx, by});
  if (result <= a)
    cout << setprecision(9) << fixed << result << endl;
  else {
    bfs(n);
    if (D[n + 1] == INF) D[n + 1] = -1;
    cout << setprecision(9) << fixed << D[n + 1] << endl;
  }
  return 0;
}
