#include <bits/stdc++.h>
using namespace std;
int n, k;
struct Point {
  double x, y;
  Point() {}
  Point(double x, double y) : x(x), y(y) {}
  bool operator<(const Point &B) const {
    if (x != B.x) return x < B.x;
    return y < B.y;
  }
  bool operator==(const Point &B) const {
    return abs(x - B.x) < 1e-7 && abs(y - B.y) < 1e-7;
  }
  Point operator+(const Point &B) const { return Point(x + B.x, y + B.y); }
  Point operator/(const double &B) const { return Point(x / B, y / B); }
} P[200005];
vector<Point> vec;
bool check(int l, int r, int tim) {
  Point Cent = P[l] + P[r];
  while (l <= r) {
    if (P[l] + P[r] == Cent)
      l++, r--;
    else if (P[l] + P[r] < Cent) {
      l++, tim--;
      if (tim < 0) return 0;
    } else {
      r--, tim--;
      if (tim < 0) return 0;
    }
  }
  return 1;
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%lf%lf", &P[i].x, &P[i].y);
  if (k >= n) {
    puts("-1");
    return 0;
  }
  sort(P + 1, P + 1 + n);
  for (int l = 0; l <= k; l++)
    for (int r = n + 1; n - r + 1 + l <= k; r--)
      if (check(l + 1, r - 1, k - (n - r + 1 + l)))
        vec.push_back((P[l + 1] + P[r - 1]) / 2.0);
  sort(vec.begin(), vec.end());
  int cnt = 0;
  for (int i = 1, siz = vec.size(); i < siz; i++)
    if (vec[i] == vec[i - 1]) cnt++;
  printf("%d\n", vec.size() - cnt);
  for (int i = 0, siz = vec.size(); i < siz; i++)
    if (i == 0 || !(vec[i] == vec[i - 1]))
      printf("%lf %lf\n", vec[i].x, vec[i].y);
}
