#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
struct Point {
  int x, y;
} a[MAXN];
int n, k;
inline bool operator<(const Point &a, const Point &b) {
  return a.x < b.x || a.x == b.x && a.y < b.y;
}
inline bool operator==(const Point &a, const Point &b) {
  return !(a < b) && !(b < a);
}
inline Point operator+(const Point &a, const Point &b) {
  Point tmp;
  tmp.x = a.x + b.x;
  tmp.y = a.y + b.y;
  return tmp;
}
map<Point, bool> u;
int ans = 0, ansx[1000], ansy[1000];
int main() {
  scanf("%d%d", &n, &k);
  if (k >= n) {
    printf("-1\n");
    return 0;
  }
  for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].x, &a[i].y);
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= k + 1; i++)
    for (int j = n; j >= n - k - 1; j--) {
      Point tmp = a[i] + a[j];
      if (u.count(tmp) == 0) {
        u[tmp] = true;
        int l = 1, r = n, t = k;
        while (l <= r) {
          if (a[l] + a[r] == tmp)
            l++, r--;
          else if (a[l] + a[r] < tmp)
            t--, l++;
          else
            t--, r--;
        }
        if (t >= 0) {
          ans++;
          ansx[ans] = tmp.x;
          ansy[ans] = tmp.y;
        }
      }
    }
  printf("%d\n", ans);
  for (int i = 1; i <= ans; i++)
    printf("%lf %lf\n", ansx[i] / 2.0, ansy[i] / 2.0);
  return 0;
}
