func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mx = 2e5 + 10;   long long int x[mx], y[mx];   int ord[mx];   int hs[mx], h = 0;   vector<int> g[mx];   int ans[mx];   int cross(int a, int o, int b) {     long long int l = (x[o] - x[a]) * (y[o] - y[b]) * y[a] * x[b];     long long int r = (y[o] - y[a]) * (x[o] - x[b]) * x[a] * y[b];     if (l == r) return 0;     if (l < r) return -1;     return 1;   }   bool cmp1(int i, int j) {     if (x[i] != x[j]) return x[i] < x[j];     if (y[i] != y[j]) return y[i] < y[j];     return i < j;   }   bool cmp(int i, int j) {     int c = cross(i, ord[0], j);     if (c == 0) {       if (x[j] != x[i]) return x[j] < x[i];       return i < j;     }     return c > 0;   }   inline bool ccw(int a, int o, int b) { return (-cross(a, o, b)) >= 0; }   int main() {     int n, xi, yi;     scanf( %d , &n);     for (int i = 0; i < n; i++) {       scanf( %d %d , &xi, &yi);       x[i] = xi, y[i] = yi, ord[i] = i;     }     sort(ord, ord + n, cmp1);     int c = 0;     int il = 0, id = 0;     for (int i = 0; i < n;) {       int ii = ord[i];       int xi = x[ii], yi = y[ii];       while (i < n && x[ord[i]] == xi && y[ord[i]] == yi) {         g[ii].push_back(ord[i]);         i++;       }       int j = ord[il];       if (xi > x[j] || (xi == x[j] && yi > y[j])) il = c;       j = ord[id];       if (yi > y[j] || (yi == y[j] && xi > x[j])) id = c;       ord[c++] = ii;     }     int dwn = ord[id];     swap(ord[0], ord[il]);     sort(ord + 1, ord + c, cmp);     for (int i = 0; i < c; i++) {       while (h >= 2 && !ccw(hs[h - 2], hs[h - 1], ord[i])) h--;       hs[h++] = ord[i];       if (ord[i] == dwn) break;     }     c = 0;     for (int i = 0; i < h; i++) {       int u = hs[i];       for (int j = 0; j < int(g[u].size()); j++) {         ans[c++] = 1 + g[u][j];       }     }     sort(ans, ans + c);     printf( %d , ans[0]);     for (int i = 1; i < c; i++) printf(  %d , ans[i]);     printf(  n );     return 0;   }   