#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T& first) {
  bool fu = 0;
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  if (c == '-') fu = 1, c = getchar();
  for (first = 0; c > 32; c = getchar()) first = first * 10 + c - '0';
  if (fu) first = -first;
};
template <class T>
inline void read(T& first, T& second) {
  read(first);
  read(second);
}
template <class T>
inline void read(T& first, T& second, T& z) {
  read(first);
  read(second);
  read(z);
}
inline char getc() {
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  return c;
}
int n, k, K, i, j, l, p, pp, p2, mid, cnt, px, py;
pair<int, int> a[200010];
set<pair<int, int> > S;
set<pair<int, int> > ANS, ch;
set<pair<int, int> >::iterator it;
int main() {
  read(n, K);
  if (K >= n) {
    printf("-1\n");
    return 0;
  }
  for (i = 1; i <= n; i++) read(a[i].first, a[i].second);
  sort(a + 1, a + 1 + n);
  for (i = 1; i <= n; i++) S.insert(make_pair(a[i].first, a[i].second));
  mid = (n + 1) / 2;
  for (cnt = 1; cnt <= 1000; cnt++) {
    p = rand() % n + 1;
    pp = 2 * mid - p;
    for (p2 = max(1, pp - 15); p2 <= min(n, pp + 15); p2++) {
      px = a[p].first + a[p2].first;
      py = a[p].second + a[p2].second;
      if (ch.find(make_pair(px, py)) != ch.end()) continue;
      ch.insert(make_pair(px, py));
      int cnt = K;
      for (i = 1; i <= n; i++) {
        int u = lower_bound(a + 1, a + 1 + n,
                            make_pair(px - a[i].first, py - a[i].second)) -
                a;
        if (a[u] != make_pair(px - a[i].first, py - a[i].second))
          if (--cnt < 0) break;
      }
      if (cnt >= 0) ANS.insert(make_pair(px, py));
    }
  }
  printf("%d\n", ANS.size());
  for (it = ANS.begin(); it != ANS.end(); it++)
    printf("%.1lf %.1lf\n", (*it).first / 2.0, (*it).second / 2.0);
  scanf("\n");
  return 0;
}
