#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m,t,cnt,sign;
int dfn[N],low[N],scc[N],male[N],female[N];
int stk0[N],cn;
vector<int> pic[N],scc_[N];
queue<int> q;
map<string,int> name;
void _set(){
cn=0;
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(scc,0,sizeof(scc));
}
void tarjan(int u);
int main(){
_set();
string u,v;
cin>>n;
for(int i=1;i<=n;i++){
cin>>u>>v;
male[i]=name[u]=++t;
female[i]=name[v]=++t;
pic[name[u]].push_back(name[v]);
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>u>>v;
pic[name[v]].push_back(name[u]);
}
for(int i=1;i<=n;i++){
if(!dfn[i]) tarjan(i);
}
for(int i=1;i<=n;i++){
if(scc[male[i]]==scc[female[i]]){
cout<<scc[male[i]]<<" "<<scc[female[i]];
cout<<"Unsafe\n";
}
else cout<<"Safe\n";
}
return 0;
}
void tarjan(int u){
int v;
dfn[u]=low[u]=++sign;
stk0[++cn]=u;
for(int i=0;i<pic[u].size();i++){
if(!dfn[pic[u][i]]){
tarjan(pic[u][i]);
low[u]=min(low[u],low[pic[u][i]]);
}
else if(!scc[pic[u][i]]){
low[u]=min(dfn[pic[u][i]],low[u]);
}
}
if(low[u]==dfn[u]){
cnt++;
do{
v=stk0[cn--];
scc_[cnt].push_back(v);
scc[v]=cnt;
}while(u!=v);
}
}