#include <bits/stdc++.h>   using namespace std;   struct Point {     double x, y;     Point() {}     Point(double _x, double _y) : x(_x), y(_y) {}   };   struct Point p0, p1, p2;   double dist(Point a, Point b) {     return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));   }   double check(Point s, Point e, Point m, double t) {     if (dist(s, m) + dist(m, e) <= t + dist(s, e))       return dist(s, e) + t - dist(m, e);     double l = 0.0, r = 1.0, mid;     for (int i = 0; i <= 1000; i++) {       mid = (l + r) / 2;       Point p = Point{s.x + mid * (m.x - s.x), s.y + mid * (m.y - s.y)};       if (dist(s, p) + dist(p, e) <= t + dist(s, e))         l = mid;       else         r = mid;     }     return mid * dist(s, m);   }   int main() {     double t1, t2, x, y;     scanf( %lf%lf , &t1, &t2);     scanf( %lf%lf , &x, &y);     p0 = {x, y};     scanf( %lf%lf , &x, &y);     p1 = {x, y};     scanf( %lf%lf , &x, &y);     p2 = {x, y};     double ans = 0.0;     ans = max(ans, min(check(p0, p1, p1, t2), check(p0, p2, p1, t1)));     ans = max(ans, min(check(p0, p1, p2, t2), check(p0, p2, p2, t1)));     if (dist(p0, p2) + dist(p2, p1) <= t2 + dist(p0, p1)) {       ans = max(ans, min(dist(p0, p1) + t2, dist(p0, p2) + dist(p2, p1) + t1));     }     double low = 0.0, high = 1.0, mid, midd;     for (int i = 1; i <= 1000; i++) {       mid = low + (high - low) / 3;       midd = high - (high - low) / 3;       Point a = Point(p1.x + (p2.x - p1.x) * mid, p1.y + (p2.y - p1.y) * mid);       Point b = Point(p1.x + (p2.x - p1.x) * midd, p1.y + (p2.y - p1.y) * midd);       double r1 = min(check(p0, p1, a, t2), check(p0, p2, a, t1));       double r2 = min(check(p0, p1, b, t2), check(p0, p2, b, t1));       if (r1 > r2)         high = midd, ans = max(ans, r1);       else         low = mid, ans = max(ans, r2);     }     printf( %.10f n , ans);     return 0;   }   