func_code_string: #include <bits/stdc++.h>   using namespace std;   int x[2000][10], y[2000][10];   double Ab(int x) {     if (x >= 0) return x;     return -x;   };   double q(double x) { return x * x; };   double d(int i, int j) {     double X, Y;     if (x[i][0] == x[i][1] && y[j][0] == y[j][1]) {       Y = min(Ab(y[i][0] - y[j][0]), Ab(y[i][1] - y[j][0]));       if (y[j][0] <= y[i][1] && y[j][0] >= y[i][0]) Y = 0;       X = min(Ab(x[j][0] - x[i][0]), Ab(x[j][1] - x[i][0]));       if (x[i][0] <= x[j][1] && x[i][0] >= x[j][0]) X = 0;     } else if (x[j][0] == x[j][1] && y[i][0] == y[i][1]) {       Y = min(Ab(y[i][0] - y[j][0]), Ab(y[i][1] - y[j][1]));       if (y[i][0] <= y[j][1] && y[i][0] >= y[j][0]) Y = 0;       X = min(Ab(x[j][0] - x[i][0]), Ab(x[j][1] - x[i][1]));       if (x[j][0] <= x[i][1] && x[j][0] >= x[i][0]) X = 0;     } else if (x[i][0] == x[i][1]) {       X = Ab(x[i][0] - x[j][0]);       Y = min(min(Ab(y[i][1] - y[j][0]), Ab(y[i][1] - y[j][1])),               min(Ab(y[i][0] - y[j][0]), Ab(y[i][0] - y[j][1])));       if (y[i][1] <= y[j][1] && y[i][1] >= y[j][0]) Y = 0;       if (y[i][0] <= y[j][1] && y[i][0] >= y[j][0]) Y = 0;     } else {       Y = Ab(y[i][0] - y[j][0]);       X = min(min(Ab(x[i][1] - x[j][0]), Ab(x[i][1] - x[j][1])),               min(Ab(x[i][0] - x[j][0]), Ab(x[i][0] - x[j][1])));       if (x[i][1] <= x[j][1] && x[i][1] >= x[j][0]) X = 0;       if (x[i][0] <= x[j][1] && x[i][0] >= x[j][0]) X = 0;     }     return (sqrt(q(X) + q(Y)));   };   int main() {     double a, b;     cin >> a >> b;     int xk, yk;     scanf( %d%d%d%d , &x[0][0], &y[0][0], &xk, &yk);     x[0][1] = x[0][0];     y[0][1] = y[0][0];     int n;     scanf( %d , &n);     x[n + 1][0] = xk;     y[n + 1][0] = yk;     x[n + 1][1] = xk;     y[n + 1][1] = yk;     for (int i = 1; i <= n; i++) {       scanf( %d%d%d%d , &x[i][0], &y[i][0], &x[i][1], &y[i][1]);       if (y[i][0] > y[i][1]) swap(y[i][0], y[i][1]);       if (x[i][0] > x[i][1]) swap(x[i][0], x[i][1]);     }     queue<pair<int, int> > q;     q.push(make_pair(0, 0));     bool was[2000];     for (int i = 0; i <= n + 1; i++) was[i] = false;     was[0] = true;     double ans = -1;     while (!q.empty()) {       pair<int, int> A = q.front();       q.pop();       int i = A.first;       int k = A.second;       if (d(n + 1, i) - a <= 1e-7) {         double X = d(n + 1, i) + (a + b) * k;         if (ans == -1)           ans = X;         else           ans = min(ans, X);       }       for (int j = 0; j <= n; j++) {         if (was[j]) continue;         if (d(i, j) - a > 1e-7) continue;         q.push(make_pair(j, k + 1));         was[j] = true;       }     }     cout << fixed << setprecision(10);     cout << ans << endl;     return 0;   }   