#include <bits/stdc++.h>
using namespace std;
const int N=2010,M=4000040;
int ver[M],nxt[M],head[N],tot=1;
int dfn[N],low[N],scc[N],stk[N],n,num,top,cnt;
bool ins[N];
struct{ int s,t,p,q;} w[N];
void add(int x,int y){
ver[++tot]=y, nxt[tot]=head[x], head[x]=tot;
}
void tarjan(int x){
dfn[x]=low[x]=++num;
stk[++top]=x, ins[x]=true;
for(int i=head[x];i;i=nxt[i]){
int y=ver[i];
if(!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
} else if(ins[y])
low[x]=min(low[x],dfn[y]);
}
if(low[x]==dfn[x]){
cnt++;
int y;
do{
y=stk[top--];
ins[y]=false;
scc[y]=cnt;
}while(x!=y);
}
}
bool overlap(int s, int t, int p,int q){
if(p>=t || s>=q) return false;
return true;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int a,b,x,y,d;
scanf("%d:%d%d:%d%d",&a,&b,&x,&y,&d);
w[i]={a*60+b,a*60+b+d,x*60+y-d,x*60+y};
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++){
if(overlap(w[i].s, w[i].t, w[j].s, w[j].t))
add(i,n+j), add(j,n+i);
if(overlap(w[i].s, w[i].t, w[j].p, w[j].q))
add(i,j), add(n+j,n+i);
if(overlap(w[i].p, w[i].q, w[j].s, w[j].t))
add(n+i,n+j), add(j,i);
if(overlap(w[i].p, w[i].q, w[j].p, w[j].q))
add(n+i,j), add(n+j,i);
}
for(int i=1;i<=2*n;i++)
if(!dfn[i])tarjan(i);
for(int i=1;i<=n;i++)
if(scc[i]==scc[n+i]) return puts("NO") & 0;
puts("YES");
for(int i=1;i<=n;i++)
if(scc[i]<scc[n+i])
printf("%02d:%02d %02d:%02d\n",w[i].s/60,w[i].s%60,w[i].t/60,w[i].t%60);
else
printf("%02d:%02d %02d:%02d\n",w[i].p/60,w[i].p%60,w[i].q/60,w[i].q%60);
return 0;
}