#include <bits/stdc++.h>
using namespace std;
const int mn = 4301000;
pair<int, int> a[mn], b[mn], c[mn];
vector<pair<int, int> > ans;
int n, m, i, j, k, l2, l1;
pair<int, int> operator+(pair<int, int> a, pair<int, int> b) {
  pair<int, int> res;
  res.first = a.first + b.first, res.second = a.second + b.second;
  return res;
}
int main() {
  scanf("%d%d", &n, &m);
  if (n <= m) {
    puts("-1");
    return 0;
  }
  for (i = 1; i <= n; ++i) scanf("%d%d", &a[i].first, &a[i].second);
  sort(a + 1, a + 1 + n);
  l2 = 0;
  for (k = 0; k <= m; ++k) {
    l1 = l2;
    for (i = 1; i <= n; ++i) {
      j = n - i + 1 - k;
      if (j >= 1) b[++l2] = a[i] + a[j];
      if (!k) continue;
      j = n - i + 1 + k;
      if (j <= n) b[++l2] = a[i] + a[j];
    }
    sort(b + 1 + l1, b + 1 + l2);
    merge(b + 1, b + 1 + l1, b + 1 + l1, b + 1 + l2, c + 1);
    l1 = l2;
    memcpy(b + 1, c + 1, l1 * sizeof(pair<int, int>));
    for (i = 1; i <= l2; i = j) {
      for (j = i; b[i] == b[j] && j <= l2; ++j)
        ;
      if (j - i >= n - k) ans.push_back(b[i]);
    }
  }
  sort(ans.begin(), ans.end());
  ans.erase(unique(ans.begin(), ans.end()), ans.end());
  printf("%d\n", ans.size());
  for (i = 0; i < ans.size(); ++i)
    printf("%.2lf %.2lf\n", (double)ans[i].first * 0.5,
           (double)ans[i].second * 0.5);
  return 0;
}
