func_code_string: #include <bits/stdc++.h>   using namespace std;      /*    find my code templates at https://github.com/galencolin/cp-templates   also maybe subscribe please thanks    */       #define send {ios_base::sync_with_stdio(false);}   #define help {cin.tie(NULL);}   #define f first   #define s second   #define getunique(v) {sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end());}   typedef long long ll;   typedef long double lld;   typedef unsigned long long ull;       template<typename A> ostream& operator<<(ostream &cout, vector<A> const &v);   template<typename A, typename B> ostream& operator<<(ostream &cout, pair<A, B> const &p) { return cout <<  (  << p.f <<  ,   << p.s <<  ) ; }   template<typename A> ostream& operator<<(ostream &cout, vector<A> const &v) {    cout <<  [ ; for(int i = 0; i < v.size(); i++) {if (i) cout <<  ,  ; cout << v[i];} return cout <<  ] ;   }   template<typename A, typename B> istream& operator>>(istream& cin, pair<A, B> &p) {    cin >> p.first;    return cin >> p.second;   }       mt19937_64 rng(std::chrono::steady_clock::now().time_since_epoch().count());   // mt19937_64 rng(61378913);   /* usage - just do rng() */       void usaco(string filename) {     // #pragma message( be careful, freopen may be wrong )    freopen((filename +  .in ).c_str(),  r , stdin);    freopen((filename +  .out ).c_str(),  w , stdout);   }       // #include <atcoder/all>   // using namespace atcoder;       const lld pi = 3.14159265358979323846;   // const ll mod = 1000000007;   // const ll mod = 998244353;   // ll mod;            ll n, m, k, q, l, r, x, y, z;   const ll template_array_size = 1e6 + 8432;   ll a[template_array_size];   ll b[template_array_size];   ll c[template_array_size];   string s, t;   ll ans = 0;       pair<ll, ll> p[200005];   vector<pair<ll, ll>> cv;   map<ll, ll> cnt;   ll tot[5000005];      void solve(int tc = 0) {    cin >> n;    for (ll i = 0; i < n; i++) {     cin >> a[i];     p[i] = {a[i], i};     ++cnt[a[i]];    }        sort(p, p + n);        ll targ = -1;    for (pair<ll, ll> x: cnt) cv.push_back(x);    for (ll i = 0; i < cv.size(); i++) {     tot[2 * cv[i].f] += cv[i].s / 2;     if (tot[2 * cv[i].f] > 1) {      targ = 2 * cv[i].f;      break;     }     for (ll j = i + 1; j < cv.size(); j++) {      tot[cv[i].f + cv[j].f] += min(cv[i].s, cv[j].s);      if (tot[cv[i].f + cv[j].f] > 1) {       targ = cv[i].f + cv[j].f;       break;      }     }     if (targ != -1) break;    }        if (targ == -1) {     cout <<  NO n ;    } else {     cout <<  YES n ;     ll pt = n - 1;     ll t = 0;     for (ll i = 0; i < n; i++) {      while (pt > i && p[i].f + p[pt].f > targ) --pt;      if (pt > i && p[i].f + p[pt].f == targ) {       cout << p[i].s + 1 <<     << p[pt].s + 1 <<    ;       --pt;       ++t;       if (t == 2) exit(0);      }     }    }   }      // two pointers? maybe   // xor tricks (or general bitwise)   // tutorial on my template      int main() {    #ifdef galen_colin_local     auto begin = std::chrono::high_resolution_clock::now();    #endif        send help        #ifndef galen_colin_local     // usaco( code );    #endif        // usaco( cowland );        // freopen( tc.cpp ,  r , stdin);    // freopen( tc2.cpp ,  w , stdout);          cout << setprecision(15) << fixed;            int tc = 1;    // cin >> tc;    for (int t = 0; t < tc; t++) solve(t);        #ifdef galen_colin_local     auto end = std::chrono::high_resolution_clock::now();     cerr << setprecision(4) << fixed;     // cerr <<  Execution time:   << std::chrono::duration_cast<std::chrono::duration<double>>(end - begin).count() <<   seconds  << endl;    #endif   } 