/*
如果发的传单是偶数,那么所有人都收到双数张、
仅考虑发了单数张传单,二分答案x,如果x左边是偶数,那么答案在右侧,如果x左边是奇数,那么答案在左侧
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ll long long
#define maxn 20005
#define INF 1000000009
using namespace std;
struct node{
ll a,b,c;
}p[maxn];
ll n;
long long check(ll x){
if(x==0) return 0;
ll res=0,tmp=0;
for(int i=1;i<=n;i++){
tmp=min(x,p[i].b);//因为这个地方没写wa了
res+=tmp>=p[i].a?(tmp-p[i].a)/p[i].c+1:0;//一定要判定一下
}
return res;
}
int main(){
while(scanf("%lld",&n)==1){
ll sum=0,l=1,r=1,ans,mid;
for(int i=1;i<=n;i++){
scanf("%lld%lld%lld",&p[i].a,&p[i].b,&p[i].c);
r=max(r,p[i].b);
sum+=p[i].a<=p[i].b?(p[i].b-p[i].a)/p[i].c+1:0;
}
if(sum%2==0){
puts("DC Qiang is unhappy.");
continue;
}
while(l<=r){
mid=l+r>>1;
if(check(mid)%2!=0)//mid及左边的传单数是奇数,那个人在左边
ans=mid,r=mid-1;
else l=mid+1; //那个人在右边
}
printf("%lld %lld\n",ans,check(ans)-check(ans-1));
}
return 0;
}