#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, U b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, U b) {
  if (a < b) a = b;
}
pair<int, int> p[200010], q[200010];
pair<int, int> operator+(pair<int, int> a, pair<int, int> b) {
  return pair<int, int>(a.first + b.first, a.second + b.second);
}
pair<int, int> operator-(pair<int, int> a, pair<int, int> b) {
  return pair<int, int>(a.first - b.first, a.second - b.second);
}
int head[7340033], nxt[7340033], E;
long long val[7340033];
int gethash(long long u) {
  if (u < 0) u = -u;
  int v = u % 7340033;
  val[E] = u;
  nxt[E] = head[v], head[v] = E++;
}
int is_hash(long long u) {
  if (u < 0) u = -u;
  int v = u % 7340033;
  for (int e = head[v]; e != -1; e = nxt[e]) {
    if (val[e] == u) return 1;
  }
  return 0;
}
int main() {
  int n, k, nn = 0;
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; i++) scanf("%d%d", &p[i].first, &p[i].second);
  if (n <= k) {
    puts("-1");
    return 0;
  }
  memset(head, -1, sizeof(head));
  sort(p, p + n);
  for (int i = 0; i < n; i++)
    gethash((long long)p[i].first * 1000000007 + p[i].second);
  for (int i = 0; i <= k; i++)
    for (int j = n - k - 1; j < n; j++) {
      q[nn++] = p[i] + p[j];
    }
  sort(q, q + nn);
  nn = unique(q, q + nn) - q;
  int ans = 0;
  for (int i = 0; i < nn; i++) {
    int cnt = 0;
    int r = n - 1;
    for (int j = 0; j < n; j++) {
      pair<int, int> a = q[i] - p[j];
      while (r >= 0 && p[r] > a) r--;
      if (r >= 0 && p[r] == a) continue;
      cnt++;
    }
    if (cnt > k) continue;
    q[ans++] = q[i];
  }
  cout << ans << endl;
  for (int i = 0; i < ans; i++)
    printf("%.10lf %.10lf\n", q[i].first / 2.0, q[i].second / 2.0);
  return 0;
}
