func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxk = 105, maxn = 2e5 + 5, inf = 1e9;   int n, k, l[maxk], r[maxk], dp[2][maxn];   int main() {     scanf( %d%d , &n, &k);     for (int i = 1; i <= k; ++i) scanf( %d %d , l + i, r + i);     if (l[k] != 2 * n) {       ++k;       l[k] = r[k] = 2 * n;     }     for (int t = 0; t < maxn; ++t) dp[1][t] = inf;     dp[1][l[1]] = 0;     for (int j = 2; j <= k; ++j) {       for (int t = 0; t < maxn; ++t) dp[j & 1][t] = inf;       for (int t = l[j] - l[j - 1]; t <= l[j]; ++t) {         dp[j & 1][t] = min(dp[j & 1][t], dp[(j - 1) & 1][t - l[j] + l[j - 1]]);       }       deque<pair<int, int> > minq;       for (int s = 0; s <= l[j]; ++s) {         int val = dp[(j - 1) & 1][s] + 1;         while (!minq.empty() && minq.back().first >= val) minq.pop_back();         minq.push_back({val, s});         while (!minq.empty() && minq.front().second + r[j - 1] - l[j - 1] < s)           minq.pop_front();         int t = l[j] - s;         dp[j & 1][t] = min(dp[j & 1][t], minq.front().first);       }       while (!minq.empty()) minq.pop_back();       for (int s = 0; s <= r[j - 1]; ++s) {         int val = dp[(j - 1) & 1][s] + 2;         while (!minq.empty() && minq.back().first >= val) minq.pop_back();         minq.push_back({val, s});         while (!minq.empty() && minq.front().second + r[j - 1] - l[j - 1] < s)           minq.pop_front();         int t = s + l[j] - r[j - 1];         dp[j & 1][t] = min(dp[j & 1][t], minq.front().first);       }     }     if (dp[k & 1][n] == inf)       printf( Hungry n );     else       printf( Full n%d n , dp[k & 1][n]);   }   