#include <bits/stdc++.h>
using namespace std;
int k, n, N;
struct pnt {
  double x, y;
  pnt() {}
  pnt(double a, double b) {
    x = a;
    y = b;
  }
} p[2234567];
pnt operator-(pnt a, pnt b) { return pnt(a.x - b.x, a.y - b.y); }
double operator*(pnt a, pnt b) { return a.x * b.y - a.y * b.x; }
double pf(double x) { return x * x; }
double dis(pnt a, pnt b) { return sqrt(pf(a.x - b.x) + pf(a.y - b.y)); }
pnt mid(pnt a, pnt b) { return pnt((a.x + b.x) / 2, (a.y + b.y) / 2); }
struct lne {
  double a, b, c;
  lne() { a = b = c = 0; }
  lne(double x, double y, double z) {
    a = x;
    b = y;
    c = z;
  }
};
double dj(pnt a, pnt b) { return a.x * b.x + a.y * b.y; }
pnt operator*(lne a, lne b) {
  return pnt((b.c * a.b - a.c * b.b) / (a.a * b.b - a.b * b.a),
             (a.c * b.a - b.c * a.a) / (a.a * b.b - a.b * b.a));
}
lne zcx(pnt a, pnt b) {
  double mx = (a.x + b.x) / 2, my = (a.y + b.y) / 2;
  double la = a.x - b.x, lb = a.y - b.y, lc = -(mx * la + my * lb);
  return lne(la, lb, lc);
}
pnt wx(pnt a, pnt b, pnt c) { return zcx(a, b) * zcx(a, c); }
double eps = 1e-6;
pnt np(pnt a, pnt b, pnt c) {
  if (fabs((b - a) * (c - a)) < eps) {
    double abl = dis(a, b), acl = dis(a, c), bcl = dis(b, c), ans = -1;
    pnt ap;
    if (abl > ans) ans = abl, ap = mid(a, b);
    if (acl > ans) ans = acl, ap = mid(a, c);
    if (bcl > ans) ans = bcl, ap = mid(b, c);
    return ap;
  }
  return wx(a, b, c);
}
double gr(pnt o, pnt a, pnt b, pnt c) {
  return max(max(dis(o, a), dis(o, b)), dis(o, c));
}
pair<pnt, double> rs[2234567];
int rn;
double area(pnt a, pnt b, pnt c) { return fabs((b - a) * (c - a)); }
bool in(pnt a, pnt b, pnt c, pnt o) {
  return fabs(area(a, b, c) - area(a, b, o) - area(c, b, o) - area(a, c, o)) <
         10;
}
double dis(pair<pnt, double> A, pair<pnt, double> B) {
  double d = dis(A.first, B.first), r1 = A.second, r2 = B.second;
  double d00 = fabs(d + r1 + r2), d01 = fabs(d + r1 - r2),
         d10 = fabs(d - r1 + r2), d11 = fabs(d - r1 - r2);
  return max(max(min(d11, d10), min(d01, d00)),
             max(min(d11, d01), min(d10, d00)));
}
int ff[2234567];
int gf(int x) { return ff[x] ? ff[x] = gf(ff[x]) : x; }
pair<double, pair<int, int> > es[2234567];
int en;
const double PI = acos(-1);
double ang(pnt s) { return atan2(s.y, s.x); }
vector<int> ap[2234567];
int main() {
  scanf("%d%d", &k, &n);
  N = k * n;
  for (int i = 1; i <= N; ++i) scanf("%lf%lf", &p[i].x, &p[i].y);
  random_shuffle(p + 1, p + 1 + N);
  while (clock() < CLOCKS_PER_SEC * 10) {
    int x = rand() % N + 1, y = rand() % N + 1, z = rand() % N + 1;
    if (x == y || x == z || y == z) continue;
    if (rn >= 2000) break;
    pnt o = np(p[x], p[y], p[z]);
    if (in(p[x], p[y], p[z], o))
      ;
    else
      continue;
    double R = gr(o, p[x], p[y], p[z]);
    int cn = 0;
    vector<double> pr;
    pr.push_back(-PI);
    pr.push_back(PI);
    for (int j = 1; j <= N; ++j) {
      double r = dis(o, p[j]);
      if (0.85 * R <= r && r <= 1.15 * R) {
        pr.push_back(ang(p[j] - o));
        ++cn;
      }
    }
    if (cn < n) continue;
    if (o.x * o.x + o.y * o.y <= 1000000.0 * 1000000)
      ;
    else
      continue;
    if (R >= 240000 && R <= 760000)
      ;
    else
      continue;
    sort(pr.begin(), pr.end());
    bool bad = 0;
    double mx = 0;
    for (int i = 1; i < pr.size(); ++i)
      if (pr[i] - pr[i - 1] > 1) mx = max(mx, pr[i] - pr[i - 1]), bad = 1;
    if (bad) continue;
    rs[++rn] = make_pair(o, R);
  }
  for (int i = 1; i <= rn; ++i)
    for (int j = i + 1; j <= rn; ++j) {
      double d = dis(rs[i], rs[j]);
      es[++en] = make_pair(d, pair<int, int>(i, j));
    }
  sort(es + 1, es + 1 + en);
  int tt = rn;
  for (int i = 1; i <= en; ++i) {
    int x = gf(es[i].second.first), y = gf(es[i].second.second);
    if (x != y) {
      --tt;
      ff[x] = y;
      if (tt == k) break;
    }
  }
  for (int i = 1; i <= rn; ++i) ap[gf(i)].push_back(i);
  for (int i = 1; i <= rn; ++i)
    if (!ff[i]) {
      double mi = 8e18;
      int X;
      for (auto x : ap[i]) {
        double dd = 0;
        for (auto y : ap[i]) dd += dis(rs[x], rs[y]);
        if (dd < mi) mi = dd, X = x;
      }
      printf("%.10lf %.10lf %.10lf\n", rs[X].first.x, rs[X].first.y,
             rs[X].second);
    }
}
