#include <bits/stdc++.h>
using namespace std;
int N, K, nrsol;
pair<int, int> P[200010];
set<pair<double, double> > Sol;
set<pair<int, int> > S;
pair<int, int> simetric(double X, double Y, double Mx, double My) {
  pair<int, int> sim;
  sim.first = 2.0 * Mx - X;
  sim.second = 2.0 * My - Y;
  return sim;
}
void check(double Mx, double My) {
  int j, i, nr = 0;
  pair<int, int> sim;
  Mx = Mx * 0.5;
  My = My * 0.5;
  for (i = 1, j = N; i <= N && nr <= K; i++) {
    sim = simetric(P[i].first, P[i].second, Mx, My);
    while (j >= 1 && (P[j].first > sim.first ||
                      (P[j].first == sim.first && P[j].second > sim.second)))
      j--;
    if (j == 0 || sim != P[j]) nr++;
  }
  if (nr <= K) Sol.insert(make_pair(Mx, My));
}
void solve() {
  if (K >= N) {
    printf("-1");
    return;
  }
  sort(P + 1, P + N + 1);
  int i, j;
  for (i = 1; i <= K + 1; i++)
    for (j = N - K - 1; j <= N; j++)
      check(P[i].first + P[j].first, P[i].second + P[j].second);
  printf("%d\n", Sol.size());
  for (set<pair<double, double> >::iterator it = Sol.begin(); it != Sol.end();
       it++)
    printf("%lf %lf\n", it->first, it->second);
}
void readData() {
  scanf("%d %d", &N, &K);
  for (int i = 1; i <= N; i++) scanf("%d %d", &P[i].first, &P[i].second);
}
int main() {
  readData();
  solve();
  return 0;
}
