func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 7;   const int inf = 0x3f3f3f3f;   const long long INF = 0x3f3f3f3f3f3f3f3f;   const int mod = 1000000007;   const double eps = 1e-6;   const double PI = acos(-1);   int tar, n, tot, a[N], hs[N], cnt[N], mx[N], now[N];   vector<int> vc;   bool check(int add) {     vc.clear();     int c = tar;     int p = mx[c];     while (c) {       if (add > c) add = 0;       while (!now[p] && p) p--;       p = min(p, mx[c]);       if (!p && !add) break;       if (p && hs[p] >= add) {         vc.push_back(p);         int v = hs[p], num = min(now[p], c / v);         now[p] -= num;         c -= num * v;       } else {         c -= add;         add = 0;       }     }     for (auto& x : vc) now[x] = cnt[x];     return c;   }   int main() {     scanf( %d%d , &tar, &n);     for (int i = 1; i <= n; i++) {       scanf( %d , &a[i]);       hs[++tot] = a[i];     }     sort(hs + 1, hs + tot + 1);     tot = unique(hs + 1, hs + tot + 1) - hs - 1;     for (int i = 1; i <= n; i++)       cnt[lower_bound(hs + 1, hs + tot + 1, a[i]) - hs]++;     for (int i = 1; i <= tot; i++) now[i] = cnt[i];     for (int i = 1; i <= tar; i++)       mx[i] = upper_bound(hs + 1, hs + tot + 1, i) - hs - 1;     for (int i = 1; i <= tar; i++) {       if (check(i)) {         printf( %d n , i);         return 0;       }     }     puts( Greed is good );     return 0;   }   