#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 10;
int n, k, cnt;
struct point {
  int x, y;
  point() {}
  point(int x, int y) : x(x), y(y) {}
  friend bool operator<(point a, point b) {
    return (a.x < b.x) || (a.x == b.x && a.y < b.y);
  }
} a[maxn];
vector<point> ans;
point operator+(point a, point b) { return point(a.x + b.x, a.y + b.y); }
bool operator==(point a, point b) { return (a.x == b.x) && (a.y == b.y); }
int find(point x, int l, int r) {
  int sum = 0;
  for (int i = l, j = r; i <= r && j >= l; i++) {
    while (x < a[i] + a[j] && j >= l) j--;
    if (a[i] + a[j] == x) sum++;
  }
  return sum;
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 0; i < n; i++) scanf("%d %d", &a[i].x, &a[i].y);
  if (n <= k) {
    printf("-1\n");
    return 0;
  }
  sort(a, a + n);
  for (int i = 0; i < k + 1; i++)
    for (int j = n - 1; j >= n - 1 - k; j--)
      if (n - find(a[i] + a[j], i, j) <= k) ans.push_back(a[i] + a[j]);
  sort(ans.begin(), ans.end());
  ans.erase(unique(ans.begin(), ans.end()), ans.end());
  printf("%d\n", ans.size());
  for (int i = 0; i < ans.size(); i++)
    printf("%.1lf %.1lf\n", (double)ans[i].x / 2.0, (double)ans[i].y / 2.0);
  return 0;
}
