#include<bits/stdc++.h>
using namespace std;
int string_to_int(string);
int day_to_int(string s){
s.erase(0,4);
int mon=string_to_int(s.substr(0,2)),day=string_to_int(s.substr(2,2));
int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int res=0;
for(int i=1;i<=mon-1;i++) res+=month[i];
res+=day;
return res;
}
struct record{
string date;
string number;
string start_time,end_time;
int total_time;
void get_total_time(){
int sh,sm,ss;
int eh,em,es;
int th,tm,ts;
sh=string_to_int(start_time.substr(0,2));
sm=string_to_int(start_time.substr(3,2));
ss=string_to_int(start_time.substr(6,2));
eh=string_to_int(end_time.substr(0,2));
em=string_to_int(end_time.substr(3,2));
es=string_to_int(end_time.substr(6,2));
th=eh-sh;
th=tm=ts=0;
if(ss>es){
ts=es+60-ss;
tm-=1;
}else ts=es-ss;
if(sm>em){
tm=tm+em+60-sm;
th-=1;
}else tm=tm+em-sm;
total_time=th*3600+tm*60+ts;
}
double run_dis;
int pause_time;
int step_num;
};
struct student{
string number;
bool male;
int P_E_score;
int long_run_time,long_run_score;
vector<record> run_re;
int sunny_run_score;
int ok_time,class_training_time;
void get_sunny_run_score(){
ok_time=0;
for(int i=0;i<=run_re.size();i++){
if(male) if(run_re[i].run_dis<3) continue;
else if(run_re[i].run_dis<1.5) continue;
if(run_re[i].run_dis*1000/run_re[i].total_time<2||run_re[i].run_dis*1000/run_re[i].total_time>5) continue;
if(run_re[i].pause_time>270) continue;
if(run_re[i].run_dis*1000/run_re[i].step_num>1.5) continue;
if(i==0){
ok_time++;
continue;
}
if(run_re[i].date!=run_re[i-1].date){
if(day_to_int(run_re[i].date)-day_to_int(run_re[i-1].date)>1){
ok_time++;
continue;
}
if(string_to_int(run_re[i].start_time.substr(0,2))+24-string_to_int(run_re[i-1].end_time.substr(0,2))>=6) ok_time++;
}else{
if(string_to_int(run_re[i].start_time.substr(0,2))-string_to_int(run_re[i-1].end_time.substr(0,2))>=6) ok_time++;
}
}
if(ok_time<=2) sunny_run_score=0;
else if(ok_time<=6) sunny_run_score=2;
else if(ok_time<=10) sunny_run_score=2;
else if(ok_time<=13) sunny_run_score=6;
else if(ok_time<=16) sunny_run_score=7;
else if(ok_time<=18) sunny_run_score=8;
else if(ok_time<=20) sunny_run_score=9;
else sunny_run_score=10;
}
int body_score;
int go_out,go_out_score,final_exam;
int total;
string grade;
};
int n,m;
student st[10010];
string tmp;
record rp;
inline int pow10_(int t){
int res=1;
while(t--) res*=10;
return res;
}
int string_to_int(string s){
int res=0;
for(int i=s.size()-1,j=0;i>=0;i--,j++) res+=(s[i]-'0')*pow10_(j);
return res;
}
int get_running_time(string s){
string ttmp="";
int i=0,res=0;
while(s[i]!='\'') ttmp+=s[i],i++;
res+=string_to_int(ttmp)*60;
i++;
ttmp="";
while(s[i]!='"') ttmp+=s[i],i++;
res+=string_to_int(ttmp);
return res;
}
void save_student_information(int t){
int i=0;
string ttmp="";
while(tmp[i]!=' ') ttmp+=tmp[i],i++;
i++;
st[t].number=ttmp;
ttmp="";
while(tmp[i]!=' ') ttmp+=tmp[i],i++;
i++;
st[t].male=(ttmp=="M");
ttmp="";
while(tmp[i]!=' ') ttmp+=tmp[i],i++;
i++;
st[t].P_E_score=string_to_int(ttmp);
ttmp="";
while(tmp[i]!=' ') ttmp+=tmp[i],i++;
i++;
st[t].long_run_time=get_running_time(ttmp);
if(st[t].male){
if(st[t].long_run_time>=1080) st[t].long_run_score=2;
else if(st[t].long_run_time>=1030) st[t].long_run_score=4;
else if(st[t].long_run_time>=990) st[t].long_run_score=6;
else if(st[t].long_run_time>=950) st[t].long_run_score=8;
else if(st[t].long_run_time>=910) st[t].long_run_score=10;
else if(st[t].long_run_time>=870) st[t].long_run_score=12;
else if(st[t].long_run_time>=840) st[t].long_run_score=14;
else if(st[t].long_run_time>=810) st[t].long_run_score=16;
else if(st[t].long_run_time>=780) st[t].long_run_score=18;
else if(st[t].long_run_time>=750) st[t].long_run_score=20;
}else{
if(st[t].long_run_time>=540) st[t].long_run_score=2;
else if(st[t].long_run_time>=530) st[t].long_run_score=4;
else if(st[t].long_run_time>=515) st[t].long_run_score=6;
else if(st[t].long_run_time>=500) st[t].long_run_score=8;
else if(st[t].long_run_time>=485) st[t].long_run_score=10;
else if(st[t].long_run_time>=470) st[t].long_run_score=12;
else if(st[t].long_run_time>=451) st[t].long_run_score=14;
else if(st[t].long_run_time>=434) st[t].long_run_score=16;
else if(st[t].long_run_time>=417) st[t].long_run_score=18;
else if(st[t].long_run_time>=400) st[t].long_run_score=20;
}
ttmp="";
while(tmp[i]!=' ') ttmp+=tmp[i],i++;
i++;
st[t].body_score=10*(ttmp=="P");
ttmp="";
while(tmp[i]!=' ') ttmp+=tmp[i],i++;
i++;
st[t].final_exam=string_to_int(ttmp);
ttmp="";
while(tmp[i]!=' ') ttmp+=tmp[i],i++;
i++;
st[t].class_training_time=string_to_int(ttmp);
}
double string_to_double_2(string s){
string ttmp="";
int i=0;
while(s[i]!='.') ttmp+=s[i],i++;
i++;
double res=string_to_int(ttmp);
s=s+' ';
ttmp="";
while(s[i]!=' ') ttmp+=s[i],i++;
res+=(string_to_int(ttmp)*0.01);
return res;
}
bool cmp(student a,student b){
return a.number<b.number;
}
int main(){
scanf("%d",&n);
getchar();
for(int i=1;i<=n;i++){
getline(cin,tmp);
tmp=tmp+' ';
save_student_information(i);
}
scanf("%d",&m);
int pn;
for(int i=1;i<=m;i++){
string ttmp;
cin>>tmp>>ttmp;
rp.date=tmp;
rp.number=ttmp;
for(int j=1;j<=n;j++)
if(st[j].number==ttmp){
pn=j;
break;
}
cin>>rp.start_time>>rp.end_time;
cin>>ttmp;
rp.run_dis=string_to_double_2(ttmp);
cin>>ttmp;
rp.pause_time=get_running_time(ttmp);
cin>>ttmp;
rp.step_num;
rp.get_total_time();
st[pn].run_re.push_back(rp);
}
for(int i=1;i<=n;i++){
st[i].get_sunny_run_score();
st[i].go_out=st[i].class_training_time+st[i].ok_time;
if(st[i].go_out<=5) st[i].go_out_score=0;
else if(st[i].go_out<=8) st[i].go_out_score=1;
else if(st[i].go_out<=11) st[i].go_out_score=2;
else if(st[i].go_out<=14) st[i].go_out_score=3;
else if(st[i].go_out<=17) st[i].go_out_score=4;
else st[i].go_out_score=5;
st[i].total=st[i].P_E_score+st[i].sunny_run_score+st[i].long_run_score+st[i].body_score+st[i].final_exam+st[i].go_out_score;
if(st[i].total>=95) st[i].grade="A+";
else if(st[i].total>=90) st[i].grade="A";
else if(st[i].total>=85) st[i].grade="B+";
else if(st[i].total>=80) st[i].grade="B";
else if(st[i].total>=77) st[i].grade="B-";
else if(st[i].total>=73) st[i].grade="C+";
else if(st[i].total>=70) st[i].grade="C";
else if(st[i].total>=67) st[i].grade="C-";
else if(st[i].total>=63) st[i].grade="D+";
else if(st[i].total>=60) st[i].grade="D";
else if(st[i].total>=0) st[i].grade="F";
}
sort(st+1,st+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<st[i].number<<" "<<st[i].total<<" "<<st[i].grade<<endl;
}
}