#include <bits/stdc++.h>
using namespace std;
template <class T>
struct Point {
  T x, y;
  explicit Point(T x = 0, T y = 0) : x(x), y(y) {}
  bool operator<(Point p) const { return tie(x, y) < tie(p.x, p.y); }
  bool operator==(Point p) const { return tie(x, y) == tie(p.x, p.y); }
  Point operator+(Point p) const { return Point(x + p.x, y + p.y); }
  Point operator-(Point p) const { return Point(x - p.x, y - p.y); }
  Point operator*(T d) const { return Point(x * d, y * d); }
  Point operator/(T d) const { return Point(x / d, y / d); }
  T dot(Point p) const { return x * p.x + y * p.y; }
  T cross(Point p) const { return x * p.y - y * p.x; }
  T cross(Point a, Point b) const { return (a - *this).cross(b - *this); }
  T dist2() const { return x * x + y * y; }
  double dist() const { return sqrt((double)dist2()); }
  double angle() const { return atan2(y, x); }
  Point unit() const { return *this / dist(); }
  Point perp() const { return Point(-y, x); }
  Point normal() const { return perp().unit(); }
  Point rotate(double a) const {
    return Point(x * cos(a) - y * sin(a), x * sin(a) + y * cos(a));
  }
};
double ccRadius(const Point<double>& A, const Point<double>& B,
                const Point<double>& C) {
  return (B - A).dist() * (C - B).dist() * (A - C).dist() /
         abs((B - A).cross(C - A)) / 2;
}
Point<double> ccCenter(const Point<double>& A, const Point<double>& B,
                       const Point<double>& C) {
  Point<double> b = C - A, c = B - A;
  return A + (b * c.dist2() - c * b.dist2()).perp() / b.cross(c) / 2;
}
const int MAXN = 5000;
int N, K;
Point<double> pt[MAXN];
pair<Point<double>, double> res[4];
long double cdist(pair<Point<double>, double> left,
                  pair<Point<double>, double> right) {
  return abs(left.first.x - right.first.x) + abs(left.first.y - right.first.y) +
         abs(left.second - right.second);
}
void gogo() {
  while (true) {
    int cval = 0;
    while (cval < K) {
      int a = rand() % (N * K), b = rand() % (N * K), c = rand() % (N * K);
      if (a == b || a == c || b == c) continue;
      if (!((pt[b] - pt[a]).cross(pt[c] - pt[a]))) continue;
      Point<double> cc = ccCenter(pt[a], pt[b], pt[c]);
      double rad = ccRadius(pt[a], pt[b], pt[c]);
      if (cc.dist() > 1050000 || rad < 200000 || rad > 800000) continue;
      bool bad = false;
      for (int i = 0; i < cval; i++) {
        if (cdist(res[i], make_pair(cc, rad)) < 350000) {
          bad = true;
          break;
        }
      }
      if (bad) continue;
      int nhit = 0;
      vector<double> v;
      for (int i = 0; i < N * K; i++) {
        double d = (cc - pt[i]).dist();
        if (d > 0.87 * rad && d < 1.13 * rad) {
          nhit++;
          v.push_back((cc - pt[i]).angle());
        }
      }
      sort(v.begin(), v.end());
      for (int i = 0; i + 1 < v.size(); i++)
        if (v[i + 1] - v[i] > 1) {
          bad = true;
        }
      if (bad) continue;
      if (nhit >= N) {
        res[cval] = make_pair(cc, rad);
        cval++;
      }
    }
    bool bad = false;
    for (int i = 0; i < N * K; i++) {
      bool found = false;
      for (int j = 0; j < K; j++) {
        double d1 = res[j].second, d2 = (res[j].first - pt[i]).dist();
        if (d2 >= 0.8 * d1 && d2 <= 1.2 * d1) found = true;
      }
      if (!found) {
        bad = true;
        break;
      }
    }
    if (!bad) break;
  }
}
int main() {
  srand(time(NULL));
  cin >> K >> N;
  for (int i = 0; i < N * K; i++) {
    cin >> pt[i].x >> pt[i].y;
  }
  gogo();
  cout << fixed << setprecision(8);
  for (int i = 0; i < K; i++) {
    cout << res[i].first.x << " " << res[i].first.y << " " << res[i].second
         << "\n";
  }
}
