#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 5;
pair<int, int> operator+(const pair<int, int>& a, const pair<int, int>& b) {
  return make_pair(a.first + b.first, a.second + b.second);
}
pair<int, int> operator-(const pair<int, int>& a, const pair<int, int>& b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
int judge(pair<int, int> p[], int n, pair<int, int> o) {
  int ret = 0;
  for (int i = 0; i < n; ++i) {
    pair<int, int> t = o - p[i];
    if (*lower_bound(p, p + n, t) == t) ++ret;
  }
  return ret;
}
void solve(int n, int k) {
  static pair<int, int> p[maxn];
  vector<pair<int, int> > candidates, ans;
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &p[i].first, &p[i].second);
  }
  if (n <= k) {
    puts("-1");
    return;
  }
  sort(p, p + n);
  p[n] = make_pair(-1, -1);
  for (int i = 0; i <= k; ++i) {
    for (int j = n - k - 1 + i; j < n; ++j) {
      pair<int, int> o = p[i] + p[j];
      candidates.push_back(o);
    }
  }
  sort(candidates.begin(), candidates.end());
  candidates.erase(unique(candidates.begin(), candidates.end()),
                   candidates.end());
  for (int i = 0; i < candidates.size(); ++i) {
    pair<int, int> o = candidates[i];
    if (judge(p, n, o) >= n - k) {
      ans.push_back(o);
    }
  }
  cout << ans.size() << endl;
  cout << fixed;
  for (int i = 0; i < ans.size(); ++i) {
    cout << ans[i].first / 2.0 << " " << ans[i].second / 2.0 << endl;
  }
}
int main() {
  for (int n, k; cin >> n >> k; solve(n, k))
    ;
}
