#include <bits/stdc++.h>
const int N = 1005;
double g[N][N], d[N];
double X1[N], Y1[N], X2[N], Y2[N];
double a, b;
bool u[N];
int tp[N];
void dij(int n) {
  int i, j, p;
  memset(u, false, sizeof(u));
  for (i = 1; i <= n + 1; i++) d[i] = g[0][i];
  d[0] = 0;
  u[0] = true;
  for (i = 1; i <= n + 1; i++) {
    double temp = 1e9;
    for (j = 1; j <= n + 1; j++) {
      if (!u[j] && d[j] < temp) {
        temp = d[j];
        p = j;
      }
    }
    if (temp == 1e9) break;
    u[p] = true;
    for (j = 1; j <= n + 1; j++) {
      if (!u[j] && d[j] > d[p] + g[p][j]) {
        d[j] = d[p] + g[p][j];
      }
    }
  }
}
void swap(double &x, double &y) {
  double temp = x;
  x = y;
  y = temp;
}
double st(int e, int sx, int sy) {
  double temp;
  if (tp[e] == 0) {
    if (sy <= Y2[e] && sy >= Y1[e]) {
      temp = (sx - X1[e]) * (sx - X1[e]);
    } else {
      if (sy > Y2[e]) {
        temp = (sx - X1[e]) * (sx - X1[e]) + (sy - Y2[e]) * (sy - Y2[e]);
      } else {
        temp = (sx - X1[e]) * (sx - X1[e]) + (sy - Y1[e]) * (sy - Y1[e]);
      }
    }
  } else {
    if (sx <= X2[e] && sx >= X1[e]) {
      temp = (sy - Y1[e]) * (sy - Y1[e]);
    } else {
      if (sx > X2[e]) {
        temp = (sy - Y1[e]) * (sy - Y1[e]) + (sx - X2[e]) * (sx - X2[e]);
      } else {
        temp = (sy - Y1[e]) * (sy - Y1[e]) + (sx - X1[e]) * (sx - X1[e]);
      }
    }
  }
  if (temp <= a * a)
    return a + b;
  else
    return 1e9;
}
double end(int e, int sx, int sy) {
  double temp;
  if (tp[e] == 0) {
    if (sy <= Y2[e] && sy >= Y1[e]) {
      temp = (sx - X1[e]) * (sx - X1[e]);
    } else {
      if (sy > Y2[e]) {
        temp = (sx - X1[e]) * (sx - X1[e]) + (sy - Y2[e]) * (sy - Y2[e]);
      } else {
        temp = (sx - X1[e]) * (sx - X1[e]) + (sy - Y1[e]) * (sy - Y1[e]);
      }
    }
  } else {
    if (sx <= X2[e] && sx >= X1[e]) {
      temp = (sy - Y1[e]) * (sy - Y1[e]);
    } else {
      if (sx > X2[e]) {
        temp = (sy - Y1[e]) * (sy - Y1[e]) + (sx - X2[e]) * (sx - X2[e]);
      } else {
        temp = (sy - Y1[e]) * (sy - Y1[e]) + (sx - X1[e]) * (sx - X1[e]);
      }
    }
  }
  if (temp <= a * a)
    return sqrt(temp);
  else
    return 1e9;
}
double check(int x, int y) {
  if (x == y) return 0;
  double temp;
  if (tp[x] == 0 && tp[y] == 0) {
    if (Y1[x] > Y2[y]) {
      temp =
          (X1[x] - X1[y]) * (X1[x] - X1[y]) + (Y1[x] - Y2[y]) * (Y1[x] - Y2[y]);
    } else if (Y2[x] < Y1[y]) {
      temp =
          (X1[x] - X1[y]) * (X1[x] - X1[y]) + (Y2[x] - Y1[y]) * (Y2[x] - Y1[y]);
    } else {
      temp = (X1[x] - X1[y]) * (X1[x] - X1[y]);
    }
  } else if (tp[x] == 1 && tp[y] == 1) {
    if (X1[x] > X2[y]) {
      temp =
          (Y1[x] - Y1[y]) * (Y1[x] - Y1[y]) + (X1[x] - X2[y]) * (X1[x] - X2[y]);
    } else if (X2[x] < X1[y]) {
      temp =
          (Y1[x] - Y1[y]) * (Y1[x] - Y1[y]) + (X2[x] - X1[y]) * (X2[x] - X1[y]);
    } else {
      temp = (Y1[x] - Y1[y]) * (Y1[x] - Y1[y]);
    }
  } else {
    if (tp[x] == 1 && tp[y] == 0) {
      int sw = x;
      x = y;
      y = sw;
    }
    if (Y1[x] <= Y1[y] && Y2[x] >= Y1[y]) {
      if (X1[x] < X1[y])
        temp = (X1[y] - X1[x]) * (X1[y] - X1[x]);
      else
        temp = (X2[y] - X1[x]) * (X2[y] - X1[x]);
    } else if (X1[y] <= X1[x] && X2[y] >= X1[x]) {
      if (Y1[y] < Y1[x])
        temp = (Y1[y] - Y1[x]) * (Y1[y] - Y1[x]);
      else
        temp = (Y1[y] - Y2[x]) * (Y1[y] - Y2[x]);
    } else {
      if (Y1[y] > Y2[x]) {
        if (X1[y] > X1[x]) {
          temp = (X1[x] - X1[y]) * (X1[x] - X1[y]) +
                 (Y1[y] - Y2[x]) * (Y1[y] - Y2[x]);
        } else {
          temp = (X1[x] - X2[y]) * (X1[x] - X2[y]) +
                 (Y1[y] - Y2[x]) * (Y1[y] - Y2[x]);
        }
      } else {
        if (X1[y] > X1[x]) {
          temp = (X1[x] - X1[y]) * (X1[x] - X1[y]) +
                 (Y1[y] - Y1[x]) * (Y1[y] - Y1[x]);
        } else {
          temp = (X1[x] - X2[y]) * (X1[x] - X2[y]) +
                 (Y1[y] - Y1[x]) * (Y1[y] - Y1[x]);
        }
      }
    }
  }
  if (temp <= a * a)
    return a + b;
  else
    return 1e9;
}
int main() {
  int n, i, sx, sy, ex, ey, j;
  scanf("%lf%lf", &a, &b);
  scanf("%d%d%d%d", &sx, &sy, &ex, &ey);
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%lf%lf%lf%lf", X1 + i, Y1 + i, X2 + i, Y2 + i);
    if (X1[i] > X2[i]) swap(X1[i], X2[i]);
    if (Y1[i] > Y2[i]) swap(Y1[i], Y2[i]);
    if (X1[i] == X2[i])
      tp[i] = 0;
    else
      tp[i] = 1;
  }
  if ((sx - ex) * (sx - ex) + (sy - ey) * (sy - ey) <= a * a) {
    printf("%.9lf\n", sqrt((sx - ex) * (sx - ex) + (sy - ey) * (sy - ey)));
    return 0;
  }
  for (i = 1; i <= n; i++) {
    g[0][i] = st(i, sx, sy);
    g[i][n + 1] = end(i, ex, ey);
    for (j = 1; j <= n; j++) {
      g[i][j] = check(i, j);
    }
  }
  g[0][n + 1] = g[n + 1][0] = 1e9;
  dij(n);
  if (d[n + 1] == 1e9)
    puts("-1");
  else
    printf("%.9lf\n", d[n + 1]);
  return 0;
}
