#include #include #include #include #include using namespace std; const int MAXN = 1000; unordered_map grundyFunction; long long rate[MAXN + 10]; int getGrundyFunction (long long k) { if (k == 0) return 0; if (grundyFunction.count(k) != 0) return grundyFunction[k]; vector sonsGrundyFunction; for(int i = 2; i < 7; i++) sonsGrundyFunction.push_back(getGrundyFunction(k / (long long)i)); sort(sonsGrundyFunction.begin(), sonsGrundyFunction.end()); unique(sonsGrundyFunction.begin(), sonsGrundyFunction.end()); for(int i = 0; i < sonsGrundyFunction.size(); i++) if (i != sonsGrundyFunction[i]) { grundyFunction[k] = i; return i; } return grundyFunction[k] = (int)sonsGrundyFunction.size(); } void preprocess () { rate[0] = 1; rate[1] = 1; rate[2] = 2; rate[3] = 2; for(int i = 4; i <= MAXN; i++) { if (i % 4 == 0) rate[i] = rate[i - 1] * 3LL; if (i % 4 == 1) rate[i] = rate[i - 1] * 2LL; if (i % 4 == 2) rate[i] = rate[i - 1] * 2LL; if (i % 4 == 3) rate[i] = rate[i - 1]; } } int getGrundyFunctionCleverer (long long k) { unsigned long long sum = 0; for(int i = 0; i <= MAXN; i++) { unsigned long long L = sum; unsigned long long R = sum + rate[i]; if (L <= k && k < R) return i % 4; sum += rate[i]; } return -1; } int main(int argc, const char * argv[]) { preprocess(); int tn; cin >> tn; assert(1 <= tn && tn <= 10); while (tn--) { int n; cin >> n; assert(1 <= n && n <= 10000); int ret = 0; for(int i = 0; i < n; i++) { long long ai; cin >> ai; assert(0 <= ai && ai <= 8000000000000000000LL); ret ^= getGrundyFunctionCleverer(ai); } if (ret == 0) cout << "Derek" << endl; else cout << "Henry" << endl; } return 0; }