#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
int n, k;
pair<int, int> p[maxn];
set<pair<int, int> > s, t;
pair<int, int> operator+(pair<int, int> A, pair<int, int> B) {
  return {A.first + B.first, A.second + B.second};
}
bool operator==(pair<int, int> A, pair<int, int> B) {
  return A.first == B.first && A.second == B.second;
}
bool operator<(pair<int, int> A, pair<int, int> B) {
  if (A.first != B.first) return A.first < B.first;
  return A.second < B.second;
}
void check(int l, int r) {
  int cnt = 0;
  pair<int, int> point = p[l] + p[r];
  l = 1, r = n;
  while (l <= r) {
    if (point == p[l] + p[r]) {
      l++, r--;
    } else if (point < p[l] + p[r]) {
      cnt++, r--;
    } else {
      cnt++, l++;
    }
  }
  if (cnt <= k) s.insert(point);
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d %d", &p[i].first, &p[i].second);
  if (n <= k) return !printf("-1\n");
  sort(p + 1, p + 1 + n);
  for (int i = 1; i <= k + 1; i++)
    for (int j = n - k; j <= n; j++) check(i, j);
  printf("%d\n", (int)s.size());
  for (auto i : s)
    printf("%.8lf %.8lf\n", (double)i.first / 2.0, (double)i.second / 2.0);
}
