#include <bits/stdc++.h>   using namespace std;   void solutionA();   int main() {     ios_base::sync_with_stdio(false);     solutionA();     return EXIT_SUCCESS;   }   long long n, a, b, u[1024];   double d[1024];   struct point {     double x, y;     point(double x = 0, double y = 0) : x(x), y(y) {}   } s, f;   struct segment {     point p1, p2;   } t[1024];   point operator+(const point& p1, const point& p2) {     return point(p1.x + p2.x, p1.y + p2.y);   }   point operator-(const point& p1, const point& p2) {     return point(p1.x - p2.x, p1.y - p2.y);   }   istream& operator>>(istream& in, point& p) {     in >> p.x >> p.y;     return in;   }   ostream& operator<<(ostream& out, point& p) {     out <<  (  << p.x <<  ,   << p.y <<  ) ;     return out;   }   double dot(const point& p1, const point& p2) {     return p1.x * p2.x + p1.y * p2.y;   }   double cross(const point& p1, const point& p2) {     return p1.x * p2.y - p1.y * p2.x;   }   double dist(const point& p1, const point& p2) {     double dx = p1.x - p2.x, dy = p1.y - p2.y;     return sqrt(dx * dx + dy * dy);   }   double dist(const point& p, const segment& s) {     double res = min(dist(p, s.p1), dist(p, s.p2));     double cos1 = dot(p - s.p1, s.p2 - s.p1);     double cos2 = dot(p - s.p2, s.p1 - s.p2);     if (fabs(cos1) > 1e-9 && cos1 < 0) return res;     if (fabs(cos2) > 1e-9 && cos2 < 0) return res;     double h = abs(cross(p - s.p1, s.p2 - s.p1)) / dist(s.p1, s.p2);     res = min(res, h);     return res;   }   double dist(const segment& s1, const segment& s2) {     double res = min(dist(s1.p1, s2), dist(s1.p2, s2));     res = min(res, min(dist(s2.p1, s1), dist(s2.p2, s1)));     return res;   }   void solve() {     memset(u, 0, sizeof(long long) * 1024);     for (long long i = 0; i < 1024; ++i) d[i] = 1e12;     d[0] = 0;     for (;;) {       long long v = -1;       for (long long i = 0; i < n + 2; ++i) {         if (u[i]) continue;         if (fabs(d[i] - 1e12) < 1e-9) continue;         if (v == -1 || d[v] > d[i]) v = i;       }       if (v == -1 || v == 1) break;       u[v] = 1;       if (v == 0) {         double l = dist(s, f);         if (fabs(l - a) < 1e-9 || l < a) {           d[1] = l;         }         for (long long i = 0; i < n; ++i) {           l = dist(s, t[i]);           if (fabs(l - a) > 1e-9 && l > a) continue;           if (fabs(a - d[i + 2]) > 1e-9 && a < d[i + 2]) {             d[i + 2] = a;           }         }       } else {         double l = dist(f, t[v - 2]);         if (fabs(l - a) < 1e-9 || l < a) {           double l2 = d[v] + b + l;           if (fabs(l2 - d[1]) > 1e-9 && l2 < d[1]) {             d[1] = l2;           }         }         for (long long i = 0; i < n; ++i) {           if (i + 2 == v) continue;           l = dist(t[v - 2], t[i]);           if (fabs(l - a) > 1e-9 && l > a) continue;           double l2 = d[v] + a + b;           if (fabs(l2 - d[i + 2]) > 1e-9 && l2 < d[i + 2]) {             d[i + 2] = l2;           }         }       }     }     if (fabs(d[1] - 1e12) < 1e-9)       cout << -1 << endl;     else       cout << fixed << d[1] << endl;   }   void solutionA() {     cout.precision(6);     for (; cin >> a >> b;) {       cin >> s >> f >> n;       for (long long i = 0; i < n; ++i) cin >> t[i].p1 >> t[i].p2;       solve();       cerr << endl;     }   }