func_code_string: #include <bits/stdc++.h>   using namespace std;   inline double sq(double a) { return a * a; }   int a, b;   int n;   complex<double> p1[1024], p2[1024];   double d[1024][1024];   int vis[1024];   double distanceSP(const complex<double>& s0, const complex<double>& s1,                     const complex<double>& p) {     if (s0.real() <= p.real() && p.real() <= s1.real()) {       return sq(p.imag() - s0.imag());     }     if (s0.imag() <= p.imag() && p.imag() <= s1.imag()) {       return sq(p.real() - s0.real());     }     return min(norm(s0 - p), norm(s1 - p));   }   double distanceSS(const complex<double>& s0, const complex<double>& s1,                     const complex<double>& t0, const complex<double>& t1) {     return min(min(distanceSP(s0, s1, t0), distanceSP(s0, s1, t1)),                min(distanceSP(t0, t1, s0), distanceSP(t0, t1, s1)));   }   double solve() {     for (int i = 0; i < (int)(n); i++)       for (int j = 0; j < (int)(i); j++) {         d[i][j] = d[j][i] = distanceSS(p1[i], p2[i], p1[j], p2[j]);       }     queue<pair<double, int> > q;     q.push(make_pair(0.0, 0));     vis[0] = 1;     double ans = -1;     while (!q.empty()) {       const pair<double, int> vv(q.front());       q.pop();       const double t = -vv.first;       const int at = vv.second;       if (ans >= 0 && t >= ans) break;       for (int i = 0; i < (int)(n); i++)         if (vis[i] == 0 && d[at][i] <= a * a) {           if (i == 1) {             const double nt = t + sqrt(d[at][i]);             if (ans == -1 || ans > nt) ans = nt;           } else {             vis[i] = 1;             q.push(make_pair(-t - a - b, i));           }         }     }     return ans;   }   int main() {     scanf( %d%d , &a, &b);     for (int i = 0; i < (int)(2); i++) {       int x, y;       scanf( %d%d , &x, &y);       p1[i] = p2[i] = complex<double>(x, y);     }     scanf( %d , &n);     for (int i = 0; i < (int)(n); i++) {       int x1, y1, x2, y2;       scanf( %d%d%d%d , &x1, &y1, &x2, &y2);       if (x1 > x2) swap(x1, x2);       if (y1 > y2) swap(y1, y2);       p1[i + 2] = complex<double>(x1, y1);       p2[i + 2] = complex<double>(x2, y2);     }     n += 2;     const double ans = solve();     if (ans < 0)       printf( %d n , -1);     else       printf( %.9f n , ans);     return 0;   }   