#include<bits/stdc++.h>
using namespace std;
pair<bool,bool> book[2007][13][32][2];
bool rn(int year){
if(year%4==0&&year%100!=0||year%400==0) return true;
else return false;
}
bool yf(int yue){
return yue<=12;
}
bool riq(int year,int yue,int ri){
if(yue==2){
if(rn(year)) return ri<=29;
else return ri<=28;
}else{
if(year==1||year==3||year==5||year==7||year==8||year==10||year==12) return ri<=31;
else return ri<=30;
}
}
bool cc(int year,int yue,int ri){
if(year>2006) return false;
if(year==2006&&yue>11) return false;
if(year==2006&&yue==1&&ri<4) return false;
return true;
}
bool pd(int year,int yue,int ri){
if(year>2006) return false;
if(yue>12||ri>31) return false;
if(yue==2){
if(rn(year)) return ri<=29;
else return ri<=28;
}else{
if(year==1||year==3||year==5||year==7||year==8||year==10||year==12) return ri<=31;
else return ri<=30;
}
}
int dfs(int year,int yue,int ri,int ds){
// cout<<year<<"."<<yue<<"."<<ri<<"\n";
if(!pd(year,yue,ri)||cc(year,yue,ri)) return 2;
if(book[year][yue][ri][ds].first) return book[year][yue][ri][ds].second;
if(ds==1){
if(year==2006&&yue==11&&ri==4){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
int dt1=year,dt2=yue,dt3=ri;
dt3++;
if(!riq(dt1,dt2,dt3)){
dt3=1;
dt2++;
if(!yf(dt2)){
dt2=1;
dt1++;
}
}
int v=dfs(dt1,dt2,dt3,0);
if(v==1){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=true;}
dt1=year;
dt2=yue;
dt3=ri;
dt2++;
if(!yf(dt2)){
dt2=1;
dt1++;
}
v=dfs(dt1,dt2,dt3,0);
if(v==1){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=true;}
else{book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
}else{
if(year==2006&&yue==11&&ri==4){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=true;}
int dt1=year,dt2=yue,dt3=ri;
dt3++;
if(!riq(dt1,dt2,dt3)){
dt3=1;
dt2++;
if(!yf(dt2)){
dt2=1;
dt1++;
}
}
int v=dfs(dt1,dt2,dt3,0);
if(v==0){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
dt1=year;
dt2=yue;
dt3=ri;
dt2++;
if(!yf(dt2)){
dt2=1;
dt1++;
}
v=dfs(dt1,dt2,dt3,1);
if(v==1){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
else{book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
}
}
int main(){
int t;
cin>>t;
while(t--){
int a,b,c;
cin>>a>>b>>c;
memset(book,false,sizeof(book));
// cout<<book[0][0][0][0].first<<" "<<book[0][0][0][0].second<<"\n";
cout<<(dfs(a,b,c,1)==1?"YES\n":"NO\n");
}
}
这是另外一份代码