#include <bits/stdc++.h>
using namespace std;
struct node {
  double x, y;
} sn[200001];
int n, k;
bool operator<(const node& e, const node& f) {
  if (abs(e.x - f.x) > 1E-8) return e.x < f.x;
  return e.y < f.y;
}
set<node> ans;
set<node>::iterator itr;
void check(double centerx, double centery) {
  node cur;
  cur.x = centerx;
  cur.y = centery;
  if (ans.find(cur) != ans.end()) return;
  double matchx, matchy;
  int errorpoint = 0, i, j = n - 1;
  bool flag;
  for (i = 0; i < n; i++) {
    flag = false;
    matchx = centerx * 2. - sn[i].x;
    matchy = centery * 2. - sn[i].y;
    for (; j >= 0 && sn[j].x >= matchx; j--) {
      if (matchx - sn[j].x == 0) {
        if (matchy - sn[j].y == 0) {
          flag = true;
          break;
        } else if (sn[j].y < matchy)
          break;
      }
    }
    if (!flag || j < 0) {
      errorpoint++;
      if (errorpoint > k) return;
    }
  }
  ans.insert(cur);
}
int main() {
  int kk, i, j, matchi;
  while (scanf("%d%d", &n, &k) != EOF) {
    ans.clear();
    for (i = 0; i < n; i++) {
      scanf("%lf%lf", &sn[i].x, &sn[i].y);
    }
    if (k >= n) {
      printf("-1\n");
      return 0;
    }
    sort(sn, sn + n);
    kk = k + 1;
    for (i = 0; i < kk; i++) {
      for (j = 0; j < kk; j++) {
        matchi = n - 1 - j;
        check(sn[i].x + (sn[matchi].x - sn[i].x) / 2.,
              sn[i].y + (sn[matchi].y - sn[i].y) / 2.);
      }
    }
    printf("%d\n", ans.size());
    for (itr = ans.begin(); itr != ans.end(); itr++) {
      printf("%.8lf %.8lf\n", itr->x, itr->y);
    }
  }
  return 0;
}
