#include <bits/stdc++.h>
const int inf = 0x3f3f3f3f;
const int mod = (int)1e9 + 7;
const int maxn = (int)2e5 + 5;
const long long INF = 0x3f3f3f3f3f3f3f3f;
using namespace std;
struct pt {
  int x, y;
  bool operator<(const pt &p) const {
    return make_pair(x, y) < make_pair(p.x, p.y);
  }
  bool operator==(const pt &p) const { return x == p.x && y == p.y; };
  pt operator+(pt p) { return {x + p.x, y + p.y}; }
} a[maxn];
int n, k;
set<pt> answ;
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= (n); i++) scanf("%d %d", &a[i].x, &a[i].y);
  if (k >= n) return 0 * puts("-1");
  sort(a + 1, a + n + 1);
  for (int l = 1; l <= (min(n, k + 1)); l++) {
    for (int r = n; r >= (max(n - k, l)); r--) {
      int cnt = l - 1 + n - r;
      if (cnt > k) continue;
      pt center = a[l] + a[r];
      int j = r;
      for (int i = l; i <= (j); i++) {
        while (i < j && center < a[i] + a[j]) {
          cnt++;
          j--;
        }
        if (a[i] + a[j] == center)
          j--;
        else
          cnt++;
      }
      if (cnt <= k) answ.insert(center);
    }
  }
  printf("%d\n", answ.size());
  for (auto p : answ) {
    printf("%.1f %.1f\n", p.x / 2.0, p.y / 2.0);
  }
  return 0;
}
