#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 300;
int n, k, l, r, lans;
bool ff;
struct points {
  int x, y;
  points() {}
  points(int xx, int yy) { x = xx, y = yy; }
  void read() { scanf("%d%d", &x, &y); }
  void write() { printf("%.9lf %.9lf\n", x / 2.0, y / 2.0); }
} a[maxn], cen, ans[maxn];
bool operator<(points a, points b) {
  return a.x < b.x || (a.x == b.x && a.y < b.y);
}
bool operator==(points a, points b) { return a.x == b.x && a.y == b.y; }
points operator+(points a, points b) { return points(a.x + b.x, a.y + b.y); }
int main() {
  scanf("%d%d", &n, &k);
  if (k >= n) {
    printf("-1\n");
    return 0;
  }
  for (int i = 1; i <= n; i++) a[i].read();
  sort(a + 1, a + n + 1);
  lans = 0;
  for (int i = 0; i <= k; i++)
    for (int j = 0; j <= k - i; j++) {
      l = i + 1;
      r = n - j;
      cen = a[l] + a[r];
      ff = 0;
      for (int p = 1; p <= lans; p++)
        if (ans[p] == cen) {
          ff = 1;
          break;
        }
      if (ff) continue;
      l++;
      r--;
      points q;
      int rest;
      for (rest = k - i - j; rest >= 0 && l <= r;) {
        q = a[l] + a[r];
        if (q == cen)
          l++, r--;
        else {
          rest--;
          if (q < cen)
            l++;
          else
            r--;
        }
      }
      if (rest >= 0) ans[++lans] = cen;
    }
  printf("%d\n", lans);
  for (int i = 1; i <= lans; i++) ans[i].write();
  return 0;
}
