func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:200000000 )   using namespace std;   const int INF = (int)1E9;   const long long INF64 = (long long)1E18;   const double EPS = 1E-9;   const double PI = acos((double)0) * 2;   const int MAXN = 210000;   struct pt {     int x, y, id;     bool operator<(const pt& p) const {       return make_pair(x, y) < make_pair(p.x, p.y);     }   };   int n, k;   pt a[MAXN], b[MAXN];   bool read() {     if (!(cin >> n >> k)) return false;     for (int i = 0; i < int(n); ++i) {       scanf( %d%d , &a[i].x, &a[i].y);       a[i].id = i;     }     return true;   }   int killed[MAXN], cu;   inline void skip(pt p[], int& ptr) {     while (ptr < n && killed[p[ptr].id] == cu) ++ptr;   }   bool check(pt delta) {     ++cu;     int already = 0;     int pa = 0, pb = 0;     for (;;) {       skip(a, pa);       skip(b, pb);       if (pa == n && pb == n) break;       if (pa == n) {         ++pb;         if (++already > k) return false;         continue;       }       if (pb == n) {         ++pa;         if (++already > k) return false;         continue;       }       pt tmp = b[pb];       tmp.x += delta.x;       tmp.y += delta.y;       if (tmp.x == a[pa].x && tmp.y == a[pa].y) {         ++pa;         ++pb;         continue;       }       if (++already > k) return false;       if (tmp < a[pa]) {         killed[b[pb].id] = cu;         ++pb;       } else {         killed[a[pa].id] = cu;         ++pa;       }     }     return already <= k;   }   void solve() {     if (k >= n) {       puts( -1 );       return;     }     for (int i = 0; i < int(n); ++i) {       b[i] = a[i];       b[i].x *= -1;       b[i].y *= -1;     }     sort(a, a + n);     sort(b, b + n);     set<pt> ans;     for (int c1 = 0; c1 < int(min(n, k + 13)); ++c1)       for (int c2 = 0; c2 < int(min(n, k + 13)); ++c2) {         pt delta;         delta.x = a[c2].x - b[c1].x;         delta.y = a[c2].y - b[c1].y;         if (!ans.count(delta))           if (check(delta)) ans.insert(delta);       }     printf( %d n , ans.size());     for (set<pt>::iterator i = ans.begin(); i != ans.end(); ++i) {       pt p = *i;       printf( %.1lf %.1lf n , p.x / 2.0, p.y / 2.0);     }   }   int main() {     if (!read()) throw;     solve();   }   