#include <bits/stdc++.h>
using namespace std;
const int N = 200000 + 5;
template <class T>
inline void getin(T& num) {
  char c;
  bool flag = 0;
  num = 0;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') flag = 1;
  while (c >= '0' && c <= '9') {
    num = num * 10 + c - 48;
    c = getchar();
  }
  if (flag) num = -num;
}
struct Point {
  long long x, y;
  Point() {}
  Point(long long a, long long b) { x = a, y = b; }
  inline bool operator<(const Point& a) const {
    if (x == a.x)
      return y < a.y;
    else
      return x < a.x;
  }
  inline bool operator==(const Point& a) const { return x == a.x && y == a.y; }
  inline Point operator+(const Point& a) const {
    return Point(x + a.x, y + a.y);
  }
} p[N], ans[N];
int n, k, m;
int main() {
  getin(n), getin(k);
  for (int i = 1; i <= n; i++) {
    getin(p[i].x), getin(p[i].y);
    p[i].x *= 2ll, p[i].y *= 2ll;
  }
  if (k >= n) puts("-1"), exit(0);
  sort(p + 1, p + n + 1);
  for (int i = 0; i <= k; i++)
    for (int j = 0; i + j <= k; j++) {
      int l = 1 + i, r = n - j;
      int last = k - i - j;
      Point t = p[l] + p[r];
      ans[++m] = t;
      while (l <= r) {
        Point tep = p[l] + p[r];
        if (tep == t)
          l++, r--;
        else if (tep < t)
          l++, last--;
        else
          r--, last--;
      }
      if (last < 0) --m;
    }
  sort(ans + 1, ans + m + 1);
  m = unique(ans + 1, ans + m + 1) - ans - 1;
  printf("%d\n", m);
  for (int i = 1; i <= m; i++) {
    printf("%.8f ", ans[i].x / 4.0);
    printf("%.8f\n", ans[i].y / 4.0);
  }
}
