#include <bits/stdc++.h>
using namespace std;
template <typename T>
T abs(T a) {
  return a < 0 ? -a : a;
}
template <typename T>
T sqr(T a) {
  return a * a;
}
const int INF = (int)1e9;
const long double EPS = 1e-9;
const long double PI = 3.1415926535897932384626433832795;
int n, m;
pair<long long, long long> p[200500];
pair<long long, long long> rp[200500];
int szans;
pair<long long, long long> ans[200500];
void check(pair<long long, long long> c) {
  for (int i = 0; i < int(n); ++i)
    rp[n - i - 1] = pair<long long, long long>(2 * c.first - p[i].first,
                                               2 * c.second - p[i].second);
  int j = 0;
  int miss = 0;
  for (int i = 0; i < int(n); ++i) {
    while (j < n && p[j] < rp[i]) ++j;
    if (j == n || p[j] != rp[i]) miss++;
  }
  if (miss <= m) ans[szans++] = c;
}
inline void printHalf(long long a) {
  if (a < 0) {
    printf("-");
    a = -a;
  }
  printf("%I64d", (a >> 1));
  if (a & 1) printf(".5");
}
int main() {
  cin >> n >> m;
  if (n <= m) {
    puts("-1");
    return 0;
  }
  for (int i = 0; i < int(n); ++i) {
    scanf("%I64d %I64d", &p[i].first, &p[i].second);
    p[i].first *= 2;
    p[i].second *= 2;
  }
  sort(p, p + n);
  for (int i = 0; i < int(m + 1); ++i)
    for (int j = n - 1; j >= n - m - 1; --j)
      check(pair<long long, long long>((p[i].first + p[j].first) / 2,
                                       (p[i].second + p[j].second) / 2));
  sort(ans, ans + szans);
  szans = unique(ans, ans + szans) - ans;
  cout << szans << endl;
  for (int i = 0; i < int(szans); ++i) {
    printHalf(ans[i].first);
    printf(" ");
    printHalf(ans[i].second);
    puts("");
  }
  return 0;
}
