#include <bits/stdc++.h>
using namespace std;
int n, k;
vector<pair<int, int> > points;
int main() {
  cin >> n >> k;
  points.resize(n);
  for (int i = 0; i < n; ++i) {
    scanf("%d %d", &points[i].first, &points[i].second);
    points[i].first *= 2;
    points[i].second *= 2;
  }
  sort(points.begin(), points.end());
  cout << fixed << setprecision(1);
  if (k >= n) {
    puts("-1");
    return 0;
  }
  map<pair<int, int>, int> is_point;
  for (int i = 0; i < n; ++i) ++is_point[points[i]];
  vector<pair<int, int> > cnt;
  for (int i = 0; i < n; ++i)
    for (int j = max(i + 1, n - 1 - i - k); j <= min(n - 1 - i + k, n - 1);
         ++j) {
      pair<int, int> p = {points[i].first / 2 + points[j].first / 2,
                          points[i].second / 2 + points[j].second / 2};
      cnt.push_back(p);
    }
  cnt.push_back({2e9, 2e9});
  vector<pair<int, int> > ans;
  if (n - k - 1 == 0)
    for (auto cur : points) ans.push_back(cur);
  sort(cnt.begin(), cnt.end());
  int l = 0;
  for (int i = 0; i < cnt.size(); ++i) {
    if (cnt[i] != cnt[l]) {
      auto cur = cnt[l];
      if (2 * (i - l) >= (n - k - is_point[cur])) ans.push_back(cur);
      l = i;
    }
  }
  sort(ans.begin(), ans.end());
  ans.erase(unique(ans.begin(), ans.end()), ans.end());
  cout << ans.size() << '\n';
  for (int i = 0; i < ans.size(); ++i)
    cout << ans[i].first / 2.0 << ' ' << ans[i].second / 2.0 << '\n';
}
