#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int s = 0;
  bool f = 0;
  char ch = ' ';
  while (!isdigit(ch)) {
    f |= (ch == '-');
    ch = getchar();
  }
  while (isdigit(ch)) {
    s = (s << 3) + (s << 1) + (ch ^ 48);
    ch = getchar();
  }
  return (f) ? (-s) : (s);
}
inline void write(int x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x < 10) {
    putchar(x + '0');
    return;
  }
  write(x / 10);
  putchar((x % 10) + '0');
}
const int N = 200005;
int n, m;
struct node {
  int x, y;
} p[N];
set<node> jfm;
inline bool operator<(node aa, node bb) {
  return (aa.x != bb.x) ? (aa.x < bb.x) : (aa.y < bb.y);
}
inline bool operator==(node aa, node bb) {
  return (aa.x == bb.x && aa.y == bb.y) ? 1 : 0;
}
inline node operator+(node aa, node bb) {
  return (node){aa.x + bb.x, aa.y + bb.y};
}
inline void chk(int l, int r) {
  int tot = 0;
  node mid = p[l] + p[r];
  l = 1;
  r = n;
  while (l <= r) {
    if (mid < p[l] + p[r])
      tot++, r--;
    else if (mid == p[l] + p[r])
      l++, r--;
    else
      tot++, l++;
  }
  if (tot <= m) jfm.insert(mid);
}
int main() {
  int i, j, l1, r1;
  n = read();
  m = read();
  if (m >= n) return puts("-1"), 0;
  for (i = 1; i <= n; i++) p[i].x = read(), p[i].y = read();
  sort(p + 1, p + n + 1);
  for (i = 1; i <= m + 1; i++)
    for (j = n - m; j <= n; j++) chk(i, j);
  write(jfm.size()), putchar('\n');
  for (auto o : jfm) {
    printf("%.11lf %.11lf\n", (double)o.x * 0.5, (double)o.y * 0.5);
  }
}
