Problem: Example

Input

3 5 4
3
6
12


Output

Hanako

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int n,a[2];
int dp[105][2];

int main(void){
	//memset(dp,0,sizeof(dp));
	scanf("%d%d%d",&n,&a[0],&a[1]);
	ll res=0;
	bool flag=false;
	int flag2=0;
	int fl=0;
	for(int i=0;i<n;i++){
		int v;
		scanf("%d",&v);
		if(a[0]==a[1]){
			res^=v%(a[0]+1);
		}
		if(a[0]>a[1]){
			if(a[1]>=v){
				res^=v;
			}else{
				flag=true;
			}
		}
		if(a[0]<a[1]){
			if(a[0]>=v){
				res^=v;
			}else if(a[1]+1>=v){
				fl=v;
				flag2++;
			}else{
				flag=true;
			}
		}
	}
	if(a[0]==a[1]){
		printf("%s\n",res!=0LL?"Hanako":"Jiro");
		return 0;
	}
	if(a[0]>a[1]){
		if(flag || flag2>=2 || flag2==n){
			printf("Hanako\n");
		}else{
			printf("%s\n",res!=0LL?"Hanako":"Jiro");
		}
	}else{
		if(flag || flag2>=2 || flag2==n){
			printf("Jiro\n");
		}else{
			if(flag2==0)printf("%s\n",res!=0LL?"Hanako":"Jiro");
			else{
				printf("%s\n",(res<=a[0] & fl-res>=0 & fl-res<=a[0])?"Hanako":"Jiro");
			}
		}
	}
	/*
	for(int i=1;i<=n;i++){
		for(int j=0;j<2;j++){
			set<int> se;
			for(int k=1;k<=a[j];k++){
				if(i-k>=0){
					se.insert(dp[i-k][1-j]);
				}
			}
			int g=0;
			while(se.count(g)!=0)g++;
			dp[i][j]=g;
		}
	}
	for(int i=0;i<=n;i++){
		printf("%d ",dp[i][0]);
	}
	printf("\n");
	for(int i=0;i<=n;i++){
		printf("%d ",dp[i][1]);
	}
	printf("\n");
	*/
	return 0;
}