func_code_string: #include <bits/stdc++.h>   const int N = 4e6 + 10;   int idx[N], rank[N];   struct Point {     int x, y;   } A[N], Line[N];   inline double slope(Point a) {     return double(A[a.x].y - A[a.y].y) / double(A[a.x].x - A[a.y].x);   }   inline long long area(Point A, Point B, Point C) {     return fabs(1LL * (A.x - C.x) * (B.y - C.y) -                 1LL * (B.x - C.x) * (A.y - C.y));   }   inline int find1(int l, int r, int u, int v, long long s) {     int res = -1;     while (l <= r) {       int mid = (l + r) >> 1;       if (area(A[idx[mid]], A[u], A[v]) >= s)         l = mid + 1, res = mid;       else         r = mid - 1;     }     return res != -1 && area(A[idx[res]], A[u], A[v]) == s ? res : -1;   }   inline int find2(int l, int r, int u, int v, long long s) {     int res = -1;     while (l <= r) {       int mid = (l + r) >> 1;       if (area(A[idx[mid]], A[u], A[v]) <= s)         l = mid + 1, res = mid;       else         r = mid - 1;     }     return res != -1 && area(A[idx[res]], A[u], A[v]) == s ? res : -1;   }   inline int solve(int u, int v, int n, long long s) {     if (rank[u] > rank[v]) std::swap(u, v);     int res1 = find1(1, rank[u] - 1, u, v, s);     if (res1 != -1) return res1;     int res2 = find2(rank[v] + 1, n, u, v, s);     if (res2 != -1) return res2;     std::swap(rank[u], rank[v]), std::swap(idx[rank[u]], idx[rank[v]]);     return 0;   }   int main() {     int n, tot = 0;     long long s;     std::cin >> n >> s;     s <<= 1;     for (int i = 1; i <= n; ++i)       std::cin >> A[i].x >> A[i].y, idx[i] = i, rank[i] = i;     std::sort(A + 1, A + n + 1, [&](const Point &a, const Point &b) {       return a.x < b.x || a.x == b.x && a.y < b.y;     });     for (int i = 1; i <= n; ++i)       for (int j = i + 1; j <= n; ++j) Line[++tot] = Point{i, j};     std::sort(Line + 1, Line + tot + 1, [&](const Point &a, const Point &b) {       int x1 = A[a.y].x - A[a.x].x, y1 = A[a.y].y - A[a.x].y;       int x2 = A[b.y].x - A[b.x].x, y2 = A[b.y].y - A[b.x].y;       return 1LL * x1 * y2 - 1LL * x2 * y1 > 0;     });     for (int i = 1; i <= tot; ++i) {       int res = solve(Line[i].x, Line[i].y, n, s);       if (res)         return printf( Yes n%d %d n%d %d n%d %d n , (A[Line[i].x]).x,                       (A[Line[i].x]).y, (A[Line[i].y]).x, (A[Line[i].y]).y,                       (A[idx[res]]).x, (A[idx[res]]).y),                0;     }     return puts( No ), 0;   }   