#include <bits/stdc++.h>   using namespace std;   template <class a, class b>   pair<a, b> operator+(pair<a, b> x, pair<a, b> y) {     return (pair<a, b>(x.first + y.first, x.second + y.second));   }   template <class t>   ostream &operator<<(ostream &tout, const vector<t> &s) {     tout <<  [ ;     for (long long i = 0; i < s.size(); i++)       if (i + 1 == s.size())         tout << s[i];       else         tout << s[i] <<  , ;     tout <<  ] ;     return (tout);   }   template <class a, class b>   ostream &operator<<(ostream &tout, const pair<a, b> &c) {     return (tout <<  (  << c.first <<  ,  << c.second <<  ) );   }   const long long MAX_N = 200000 + 20;   const complex<double> change(1.42423, 1.31231);   pair<long long, long long> num[MAX_N];   long long n, order[MAX_N], k;   bool df(long long a, long long b) {     double x = (complex<double>(num[a].first, num[a].second) * change).real();     double y = (complex<double>(num[b].first, num[b].second) * change).real();     return (x < y);   }   pair<long long, long long> first[MAX_N], second[MAX_N];   long long amount() {     long long p1 = 1, p2 = 1, ans = 0;     while (p1 <= n && p2 <= n) {       if (first[p1] < second[p2]) {         ans++;         p1++;         continue;       }       if (first[p1] > second[p2]) {         ans++;         p2++;         continue;       }       p1++;     }     ans += (n + 1) * 2 - p1 - p2;     return (ans);   }   int main() {     cout << fixed;     cout.precision(1);     ios_base::sync_with_stdio(false);     cin >> n >> k;     if (k >= n) {       cout << -1 << endl;       return (0);     }     for (long long i = 1; i <= n; i++) {       cin >> num[i].first >> num[i].second;       num[i].first *= 2;       num[i].second *= 2;     }     vector<pair<long long, long long> > candidates;     for (long long i = 1; i <= n; i++) order[i] = i;     sort(order + 1, order + n + 1, df);     for (long long i = 1; i <= n && i <= 11; i++)       for (long long j = n; j >= 1 && j >= n - 10; j--)         if (i - 1 + n - j <= k)           candidates.push_back(pair<long long, long long>(               (num[order[i]].first + num[order[j]].first) / 2,               (num[order[i]].second + num[order[j]].second) / 2));     vector<pair<long long, long long> > result;     sort(candidates.begin(), candidates.end());     candidates.resize(unique(candidates.begin(), candidates.end()) -                       candidates.begin());     for (long long i = 1; i <= n; i++) first[i] = num[i];     sort(first + 1, first + n + 1);     for (long long i = 1; i <= n; i++)       second[i] = pair<long long, long long>(-first[n - i + 1].first,                                              -first[n - i + 1].second);     for (long long i = 0; i < candidates.size(); i++) {       if (i == 0)         for (long long j = 1; j <= n; j++) {           second[j].first += 2 * candidates[i].first;           second[j].second += 2 * candidates[i].second;         }       else         for (long long j = 1; j <= n; j++) {           second[j].first += 2 * (candidates[i].first - candidates[i - 1].first);           second[j].second +=               2 * (candidates[i].second - candidates[i - 1].second);         }       if (amount() <= n + k) result.push_back(candidates[i]);     }     cout << result.size() << endl;     for (long long i = 0; i < result.size(); i++)       cout << ((double)result[i].first) / 2 <<                << ((double)result[i].second) / 2 << endl;   }