#include #include #include using namespace std; double const E = 0.001; int const INF = 1000; double d; struct Point { double x; double y; double z; double Vx; double Vy; double Vz; }; vector q; double f(Point a, Point b,double t) { a.x += a.Vx*t; b.x += b.Vx*t; a.y += a.Vy*t; b.y += b.Vy*t; a.z += a.Vz*t; b.z += b.Vz*t; return max((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) + (a.z - b.z)*(a.z - b.z) , d ); } double tern(Point a, Point b) { double l = 0; double r = INF; while (r - l > E) { double ml = (r + l) / 3 + l; double mr = 2 * (l + r) / 3 + l; if ( f(a, b, ml) > f(a, b, mr) ) l = ml; else r = mr; } return l; } int main() { int n; cin >> n >> d; q.resize(n); vector rez; for (int i = 0; i < n; ++i) { cin >> q[i].x >> q[i].y >> q[i].z >> q[i].Vx >> q[i].Vy >> q[i].Vz; } double c; for (int j = 0; j < n - 1; ++j) { for (int k = j + 1; k < n; ++k) { c = tern(q[j], q[k]); if (c != 0 && c != INF) rez.push_back(c); } } c = INF; if (rez.size() == 0) cout << "OK" << endl; else { for (int i = 0; i < rez.size(); ++i) { if (rez[i] < c) c = rez[i]; } cout << "ALARM!" << endl << c << endl; } return 0; }