F. Cutlet
time limit per test:4 seconds
memory limit per test:256 megabytes
input:standard input
output:standard output
Arkady wants tohave a dinner. He has just returned from a shop where he has bought asemifinished cutlet. He only needs to fry it. The cutlet should be fried for 2n seconds, in particular, it should be fried for n seconds on one side and n seconds on the other side. Arkady hasalready got a frying pan and turn on fire, but understood that maybe he won'tbe able to flip the cutlet exactly after n seconds afterthe beginning of cooking.
Arkady is toobusy with sorting sticker packs in his favorite messenger and can flip thecutlet only in some periods of time. Namely, there are k periods of time in which he can do it, the i-th of them isan interval of time from li seconds afterhe starts cooking till ri seconds,inclusive. Arkady decided that it's not required to flip the cutlet exactly inthe middle of cooking, instead, he will flip it several times in such a waythat the cutlet will be fried exactly n seconds on oneside and n seconds on the other side in total.
Help Arkady andfind out if it's possible for him to cook the cutlet, if he is able to flip thecutlet only in given periods of time; and if yes, find the minimum number offlips he needs to cook the cutlet.
Input
The first linecontains two integers n and k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 100) — the number of seconds the cutlet should be cooked on each sideand number of periods of time in which Arkady can flip it.
The next k lines contain descriptions of these intervals. Each line contains twointegers li and ri (0 ≤ li ≤ ri ≤ 2·n), meaning that Arkady can flip the cutlet in any moment starting from li seconds after the beginning of cooking and finishing at ri seconds after beginning of cooking. In particular, if li = ri then Arkady can flip the cutlet only in the moment li = ri. It's guaranteed that li > ri - 1 for all 2 ≤ i ≤ k.
Output
Output "Hungry" if Arkadywon't be able to fry the cutlet for exactly n seconds on oneside and exactly n seconds on the other side.
Otherwise, output "Full" in thefirst line, and the minimum number of times he should flip the cutlet in thesecond line.
Examples
Input
Copy
10 2
3 5
11 13
Output
Full
2
Input
Copy
10 3
3 5
9 10
11 13
Output
Full
1
Input
Copy
20 1
3 19
Output
Hungry
Note
In the firstexample Arkady should flip the cutlet in time moment 3 seconds afterhe starts cooking and in time moment 13 seconds after he starts cooking.
In the secondexample, Arkady can flip the cutlet at 10 seconds afterhe starts cooking.
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define LL long long
#define N 200010
using namespace std;
int dp[2][N],q[N],n,k;
int main()
{
memset(dp,INF,sizeof(dp));
cin>>n>>k; dp[0][0]=0; int pre=0,cur=1;
for(int i=1;i<=k;i++)
{
int h=1,t=0,l,r;
scanf("%d%d",&l,&r);
for(int j=0;j<=r;j++)
{
if (j<=n)
{
while(h<=t&&dp[pre][j]<=dp[pre][q[t]]) t--;
q[++t]=j;
}
while(h<=t&&q[h]<j-(r-l)) h++;
dp[cur][j]=min(dp[pre][j],dp[pre][q[h]]+2);
}
h=1,t=0;
for(int j=r;j>=0;j--)
{
if (r-j<=n)
{
while(h<=t&&dp[pre][r-j]<=dp[pre][q[t]]) t--;
q[++t]=r-j;
}
while(h<=t&&q[h]<l-j) h++;
dp[cur][j]=min(dp[cur][j],dp[pre][q[h]]+1);
}
swap(cur,pre);
}
if (dp[pre][n]>=INF) puts("Hungry");
else printf("Full\n%d",dp[pre][n]);
return 0;
}