#include <bits/stdc++.h>   using namespace std;   int testnum;   struct Point3 {     double x, y, z;     Point3(double _x = 0, double _y = 0, double _z = 0) {       x = _x;       y = _y;       z = _z;     }     bool operator==(Point3 other) {       return abs(x - other.x) < 1e-9 && abs(y - other.y) < 1e-9 &&              abs(z - other.z) < 1e-9;     }     bool operator!=(Point3 other) {       return abs(x - other.x) > 1e-9 || abs(y - other.y) > 1e-9 ||              abs(z - other.z) > 1e-9;     }     double length() { return sqrt(x * x + y * y + z * z); }     Point3 operator*(double k) { return Point3(k * x, k * y, k * z); }     Point3 normalize() { return (*this) * (1 / length()); }     Point3 operator+(Point3 other) {       return Point3(x + other.x, y + other.y, z + other.z);     }     Point3 operator-(Point3 other) {       return Point3(x - other.x, y - other.y, z - other.z);     }     double dist(Point3 other) { return (*this - other).length(); }     double operator^(Point3 other) {       return x * other.x + y * other.y + z * other.z;     }     Point3 operator*(Point3 other) {       return Point3(y * other.z - z * other.y, z * other.x - x * other.z,                     x * other.y - y * other.x);     }     void display() { printf( Point3 (%lf , %lf , %lf) n , x, y, z); }   };   Point3 operator*(double k, Point3 p) {     return Point3(k * p.x, k * p.y, k * p.z);   }   struct Point2 {     double x, y;     Point2(double _x = 0, double _y = 0) {       x = _x;       y = _y;     }     double length() { return sqrt(x * x + y * y); }     Point2 operator*(double k) { return Point2(k * x, k * y); }     Point2 normalize() { return (*this) * (1 / length()); }     Point2 operator+(Point2 other) { return Point2(x + other.x, y + other.y); }     Point2 operator-(Point2 other) { return Point2(x - other.x, y - other.y); }     double dist(Point2 other) { return (*this - other).length(); }     double operator^(Point2 other) { return x * other.x + y * other.y; }     double operator*(Point2 other) { return x * other.y - y * other.x; }     void display() { printf( Point2 (%lf , %lf) n , x, y); }   };   Point2 operator*(double k, Point2 p) { return Point2(k * p.x, k * p.y); }   struct Plane {     double a, b, c, d;     Point3 A, B, C;     Point3 N, O, X, Y;     Plane() {}     Plane(Point3 _AA, Point3 _BB, Point3 _CC) {       A = _AA;       B = _BB;       C = _CC;       Point3 normal = (B - A) * (C - A);       N = normal.normalize();       a = N.x;       b = N.y;       c = N.z;       d = -(A ^ N);       O = Point3(-d * a, -d * b, -d * c);       if (A != O)         X = (A - O).normalize();       else         X = (B - O).normalize();       Y = normal * X;     }     Plane(double _a, double _b, double _c, double _d) {       double len = sqrt(_a * _a + _b * _b + _c * _c);       a = _a / len;       b = _b / len;       c = _c / len;       d = _d / len;       N = Point3(a, b, c);       if (a != 0) {         A = Point3(-(d + 0 * b + 0 * c) / a, 0, 0);         B = Point3(-(d + 1 * b + 0 * c) / a, 1, 0);         C = Point3(-(d + 0 * b + 1 * c) / a, 0, 1);       } else if (b != 0) {         A = Point3(0, -(d + 0 * a + 0 * c) / b, 0);         B = Point3(1, -(d + 1 * a + 0 * c) / b, 0);         C = Point3(0, -(d + 0 * a + 1 * c) / b, 1);       } else {         A = Point3(0, 0, -(d + 0 * a + 0 * b) / c);         B = Point3(1, 0, -(d + 1 * a + 0 * b) / c);         C = Point3(0, 1, -(d + 0 * a + 1 * b) / c);       }       O = Point3(-d * a, -d * b, -d * c);       if (A != O)         X = (A - O).normalize();       else         X = (B - O).normalize();       Y = N * X;     }     Point3 project(Point3 P) { return (P - (P ^ N) * N) + O; }     Point2 project2D(Point3 P) {       P = project(P);       return Point2(P ^ X, P ^ Y);     }     double distance(Point3 p) { return abs(a * p.x + b * p.y + c * p.z + d); }     void display() {       printf( Plane (%lf , %lf , %lf , %lf) n , a, b, c, d);       printf( A :  );       A.display();       printf( B :  );       B.display();       printf( C :  );       C.display();       printf( N :  );       N.display();       printf( O :  );       O.display();       printf( X :  );       X.display();       printf( Y :  );       Y.display();     }   };   void preprocess() {}   int n, m;   vector<Point3> p3;   vector<Point2> p2;   vector<Plane> plns;   double eval(double x, double y) {     double ans = 0;     double dx, dy;     for (int i = 0; i < n; i++) {       dx = x - p2[i].x;       dy = y - p2[i].y;       ans = max(ans, dx * dx + dy * dy);     }     return ans;   }   pair<double, double> doTernaryY(double x) {     double lo = 1e4;     double hi = 0;     for (int i = 0; i < n; i++) {       lo = min(lo, p2[i].y);       hi = max(hi, p2[i].y);     }     for (int iter = 0; iter < 35; iter++) {       double y1 = (lo + lo + hi) / 3;       double y2 = (lo + hi + hi) / 3;       double val1 = eval(x, y1);       double val2 = eval(x, y2);       if (val1 < val2)         hi = y2;       else         lo = y1;     }     double ans = (lo + hi) / 2;     return make_pair(ans, eval(x, ans));   }   pair<double, double> doTernaryX() {     double lo = 1e4;     double hi = 0;     for (int i = 0; i < n; i++) {       lo = min(lo, p2[i].x);       hi = max(hi, p2[i].x);     }     for (int iter = 0; iter < 35; iter++) {       double x1 = (lo + lo + hi) / 3;       double x2 = (lo + hi + hi) / 3;       double val1 = doTernaryY(x1).second;       double val2 = doTernaryY(x2).second;       if (val1 < val2)         hi = x2;       else         lo = x1;     }     double ans = (lo + hi) / 2;     return make_pair(ans, doTernaryY(ans).first);   }   void solve() {     p2.resize(n);     for (int i = 0; i < m; i++) {       for (int j = 0; j < n; j++) p2[j] = plns[i].project2D(p3[j]);       pair<double, double> centre = doTernaryX();       double rad = sqrt(eval(centre.first, centre.second));       printf( %.9lf n , rad);     }   }   bool input() {     scanf( %d , &n);     scanf( %d , &m);     p3.resize(n);     plns.resize(m);     int a, b, c;     for (int i = 0; i < n; i++) {       scanf( %d , &a);       scanf( %d , &b);       scanf( %d , &c);       p3[i] = Point3(a, b, c);     }     for (int i = 0; i < m; i++) {       scanf( %d , &a);       scanf( %d , &b);       scanf( %d , &c);       plns[i] = Plane(a, b, c, 0);     }     return true;   }   int main() {     preprocess();     int T = 1;     for (testnum = 1; testnum <= T; testnum++) {       if (!input()) break;       solve();     }   }