func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   const ll N = 1e6 + 233;   struct node {     ll x, y;     node(ll x = 0, ll y = 0) : x(x), y(y) {}   };   ll dist(node a, node b) {     ll L = a.x - b.x;     ll R = a.y - b.y;     return L * L + R * R;   }   vector<node> v;   vector<ll> ans;   ll cnt[3][3];   int main() {     int n;     scanf( %d , &n);     for (int i = 1; i <= n; ++i) {       ll x, y;       scanf( %lld%lld , &x, &y);       v.emplace_back(x, y + N);     }     for (;;) {       for (int i = 0; i < 2; ++i)         for (int j = 0; j < 2; ++j) cnt[i][j] = 0;       for (int i = 0; i < n; ++i) ++cnt[v[i].x & 1][v[i].y & 1];       if (cnt[0][0] + cnt[1][1] && cnt[1][0] + cnt[0][1]) {         for (int i = 0; i < n; ++i)           if ((v[i].x + v[i].y) & 1) ans.push_back(i + 1);         break;       } else if (cnt[0][0] + cnt[0][1] && cnt[1][0] + cnt[1][1]) {         for (int i = 0; i < n; ++i)           if (v[i].x & 1) ans.push_back(i + 1);         break;       } else {         int x, y;         for (int i = 0; i < 2; ++i)           for (int j = 0; j < 2; ++j)             if (cnt[i][j]) {               x = i;               y = j;             }         for (int i = 0; i < n; ++i) {           v[i].x = (v[i].x - x) >> 1;           v[i].y = (v[i].y - y) >> 1;         }       }     }     printf( %d n , ans.size());     for (auto i : ans) printf( %d  , i);     printf(  n );     return 0;   }   