func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T, class U>   void ckmin(T &a, U b) {     if (a > b) a = b;   }   template <class T, class U>   void ckmax(T &a, U b) {     if (a < b) a = b;   }   int N, K;   pair<int, int> arr[213];   vector<pair<int, int> > blocks;   int dp[100013][2];   int tmp[100013][2];   int ans;   int32_t main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout << fixed << setprecision(12);     cerr << fixed << setprecision(4);     cin >> N >> K;     for (auto i = (0); i < (K); i++) {       cin >> arr[i].first >> arr[i].second;       if (i == 0 && arr[i].first > 0) {         blocks.push_back({arr[i].first, 0});       }       if (i > 0) {         blocks.push_back({arr[i].first - arr[i - 1].second, 0});       }       blocks.push_back({arr[i].second - arr[i].first, 1});     }     if (arr[K - 1].second != 2 * N) {       blocks.push_back({2 * N - arr[K - 1].second, 0});     }     for (auto i = (0); i < (N + 1); i++) {       dp[i][0] = 1000000007;       dp[i][1] = 1000000007;     }     dp[0][0] = 0;     dp[0][1] = 0;     for (pair<int, int> p : blocks) {       int sz = p.first;       if (!p.second) {         for (auto i = (N + 1) - 1; i >= (sz); i--) {           dp[i][0] = dp[i - sz][0];         }         for (auto i = (sz)-1; i >= (0); i--) {           dp[i][0] = 1000000007;         }       } else {         for (auto i = (0); i < (N + 1); i++) {           tmp[i][0] = 1000000007;           tmp[i][1] = 1000000007;         }         multiset<int> dp0, dp1;         for (auto i = (0); i < (N + 1); i++) {           dp0.insert(dp[i][0]);           dp1.insert(dp[i][1]);           ckmin(tmp[i][0], *dp0.begin() + 2);           ckmin(tmp[i][1], *dp1.begin() + 2);           ckmin(tmp[i][1], *dp0.begin() + 1);           ckmin(tmp[i][0], *dp1.begin() + 1);           if (i >= sz) {             dp0.erase(dp0.find(dp[i - sz][0]));             dp1.erase(dp1.find(dp[i - sz][1]));           }         }         for (auto i = (0); i < (N + 1); i++) {           ckmin(tmp[i][1], dp[i][1]);         }         for (auto i = (0); i < (N + 1 - sz); i++) {           ckmin(tmp[i + sz][0], dp[i][0]);         }         for (auto i = (0); i < (N + 1); i++) {           dp[i][0] = tmp[i][0];           dp[i][1] = tmp[i][1];         }       }     }     ans = min(dp[N][0], dp[N][1]);     if (ans >= 1000000007) {       cout <<  Hungry n ;       return 0;     }     cout <<  Full n  << ans <<   n ;     return 0;   }   