#include <bits/stdc++.h>
using namespace std;
pair<int, int> W[200010];
struct ANS {
  double ansx, ansy;
  bool operator<(const ANS &a) const {
    return (ansx < a.ansx) || (ansx == a.ansx && ansy < a.ansy);
  }
} A[100];
int n, k, i, j, Ans, An;
bool pd(int a, int b) {
  int s = 0, co = n;
  for (int i = 1; i <= n; i++) {
    int t1 = W[a].first + W[b].first - W[i].first;
    int t2 = W[a].second + W[b].second - W[i].second;
    while (co > 0 &&
           (W[co].first > t1 || (W[co].first == t1 && W[co].second > t2)))
      co--;
    if (W[co].first != t1 || W[co].second != t2) s++;
    if (s > k) return 0;
  }
  return 1;
}
int main() {
  scanf("%d%d", &n, &k);
  if (k >= n) {
    printf("-1\n");
    return 0;
  }
  for (i = 1; i <= n; i++) scanf("%d%d", &W[i].first, &W[i].second);
  sort(W + 1, W + n + 1);
  for (i = 1; i <= k + 1; i++)
    for (j = n; j >= n - k; j--)
      if (i - 1 + n - j <= k) {
        if (pd(i, j)) {
          A[++Ans].ansx = (W[i].first + W[j].first) / 2.;
          A[Ans].ansy = (W[i].second + W[j].second) / 2.;
        }
      } else
        break;
  sort(A + 1, A + Ans + 1);
  An = Ans;
  for (i = 2; i <= Ans; i++)
    if (A[i].ansx == A[i - 1].ansx && A[i].ansy == A[i - 1].ansy) An--;
  printf("%d\n", An);
  if (An) {
    printf("%.1lf %.1lf\n", A[1].ansx, A[1].ansy);
    for (i = 2; i <= Ans; i++)
      if (!(A[i].ansx == A[i - 1].ansx && A[i].ansy == A[i - 1].ansy))
        printf("%.1lf %.1lf\n", A[i].ansx, A[i].ansy);
  }
  return 0;
}
