#include #include #include typedef struct { int x; int y; } DOT; int cmpx (const void *a, const void *b) { return (((DOT *) a) -> x - ((DOT *) b) -> x); } int cmpy (const void *a, const void *b) { return (((DOT *) a) -> y - ((DOT *) b) -> y); } int n; DOT data [20003]; DOT tmp1 [10003]; DOT tmp2 [10003]; int i, p0, p1, ti, tn; double s_x, s_y; int found; int bug; void do_temp () { int tp0, tp1; qsort (tmp1, tn, sizeof (DOT), cmpy); qsort (tmp2, tn, sizeof (DOT), cmpy); tp0 = 0; tp1 = tn - 1; while (tp1 > -1 && ! bug) { double t_x, t_y; t_x = (((double) tmp1 [tp0] . x) + ((double) tmp2 [tp1] . x)) / 2; t_y = (((double) tmp1 [tp0] . y) + ((double) tmp2 [tp1] . y)) / 2; if (found == 0) { s_x = t_x; s_y = t_y; found = 1; } else { if ((s_x - t_x) > 0.0000001 || (s_x - t_x) < -0.0000001) bug = 1; if ((s_y - t_y) > 0.0000001 || (s_y - t_y) < -0.0000001) bug = 1; } tp0 ++; tp1 --; } tn = 0; } int main (void) { while (scanf ("%d", &n), n != 0) { for (i = 0; i < n; i++) scanf ("%d %d", &(data [i] . x), &(data [i] . y)); qsort (data, n, sizeof (DOT), cmpx); found = 0; bug = 0; p0 = 0; p1 = n - 1; tn = 0; while (p0 < p1 && ! bug) { if (tn == 0 || (data [p0] . x == tmp1 [0] . x) || (data [p1] . x == tmp2 [0] . x)) { tmp1 [tn] . x = data [p0] . x; tmp1 [tn] . y = data [p0] . y; tmp2 [tn] . x = data [p1] . x; tmp2 [tn] . y = data [p1] . y; tn++; p0 ++; p1 --; } else do_temp (); } do_temp (); if (bug) printf ("This is a dangerous situation!\n"); else printf ("V.I.P. should stay at (%.1f,%.1f).\n", s_x, s_y); } return (0); }