#include <bits/stdc++.h>
using namespace std;
int n, k, i;
vector<pair<long double, long double> > sol;
struct pct {
  int x;
  int y;
} A[200005];
struct cmp {
  inline bool operator()(const pct &a, const pct &b) {
    if (a.x != b.x) {
      return a.x < b.x;
    }
    return a.y < b.y;
  }
};
inline void citire() {
  scanf("%d %d", &n, &k);
  for (i = 1; i <= n; ++i) {
    scanf("%d %d", &A[i].x, &A[i].y);
  }
}
inline bool check(double x, double y) {
  int rem = k, p = 1, u = n;
  while (p <= u) {
    if (A[p].x + A[u].x == 2 * x && A[p].y + A[u].y == 2 * y) {
      ++p;
      --u;
    } else {
      --rem;
      if (rem < 0) return 0;
      long double x1, y1;
      x1 = 2 * x - A[p].x;
      y1 = 2 * y - A[p].y;
      if (A[u].x < x1 || (A[u].x == x1 && A[u].y < y1)) {
        ++p;
      } else {
        --u;
      }
    }
  }
  return 1;
}
inline void solve() {
  if (k >= n) {
    printf("-1\n");
    return;
  }
  sort(A + 1, A + n + 1, cmp());
  for (int i = 1; i <= k + 1; ++i) {
    for (int j = n; j >= n - k; --j) {
      double x = (A[i].x + A[j].x) / 2.0;
      double y = (A[i].y + A[j].y) / 2.0;
      if (check(x, y)) {
        sol.push_back(make_pair(x, y));
      }
    }
  }
  vector<pair<double, double> > S;
  sort(sol.begin(), sol.end());
  for (int i = 0; i < sol.size(); ++i) {
    if ((!i) || sol[i].first != sol[i - 1].first ||
        sol[i].second != sol[i - 1].second) {
      S.push_back(make_pair(sol[i].first, sol[i].second));
    }
  }
  printf("%d\n", S.size());
  for (int i = 0; i < S.size(); ++i) {
    printf("%lf %lf\n", S[i].first, S[i].second);
  }
}
int main() {
  citire();
  solve();
  return 0;
}
