#include <bits/stdc++.h>
const int inf = 1000000009;
const double pi = acos(-1.0);
using namespace std;
int i, j, k, m, n;
const int Z = 11;
int dp[200002][2 * Z + 1], ii, jj, val;
pair<int, int> p[200002];
set<pair<int, int> > S;
void upd(int& x, int y) {
  if (x == -1 || x > y) x = y;
}
int main() {
  cin >> n >> k;
  for (i = 0; i < n; i++) {
    scanf("%d%d", &j, &m);
    p[i].first = j;
    p[i].second = m;
  }
  if (n <= k) {
    cout << -1 << endl;
    return 0;
  }
  sort(p, p + n);
  memset(dp, -1, sizeof(dp));
  for (i = 0; i < n; i++)
    if (i <= k)
      for (j = 0; j < n; j++)
        if (i + j <= k)
          if (i <= n - 1 - j) dp[i][i - j + Z] = i + j;
  for (i = 0; i < n; i++)
    for (int dij = -Z; dij <= Z; dij++)
      if (dp[i][dij + Z] != -1) {
        val = dp[i][dij + Z];
        j = n - i - 1 + dij;
        if (max(j - i - 1, 0) + val <= k) {
          S.insert(pair<int, int>(p[i].first + p[j].first,
                                  p[i].second + p[j].second));
          continue;
        }
        for (ii = i + 1; ii - i - 1 + val <= k && ii < j; ii++)
          for (jj = j - 1; ii - i - 1 + val + j - jj - 1 <= k && jj >= ii;
               jj--) {
            if ((p[i].first + p[j].first == p[ii].first + p[jj].first) &&
                (p[i].second + p[j].second == p[ii].second + p[jj].second)) {
              upd(dp[ii][jj - (n - ii - 1) + Z], ii - i - 1 + val + j - jj - 1);
            }
          }
      }
  cout << S.size() << endl;
  for (set<pair<int, int> >::iterator it = S.begin(); it != S.end(); it++) {
    printf("%.1lf %.1lf\n", (*it).first / 2.0, (*it).second / 2.0);
  }
  return 0;
}
