if( dfn[u] == low[u] ) { scc_cnt ++; int v; do { v = st.top( ); st.pop( ); in_stack[v] = false; scc[v] = scc_cnt; } while( v != u ); } }
voidsolve( ) { cin >> n;
for( int i = 1; i <= n; ++ i ) { cin >> girl >> boy; id[girl] = i; id[boy] = i + n; couples.push_back({ i, i + n }); adj[i].push_back( i + n ); } cin >> m; for( int i = 1; i <= m; ++ i ) { cin >> girl >> boy; int u = id[girl], v = id[boy]; adj[v].push_back( u ); }
for( int i = 1; i <= n * 2; ++ i ) { if( !dfn[i] ) tarjan( i ); }
for( int i = 0; i < n; ++ i ) { auto [u, v] = couples[i]; if( scc[u] == scc[v] ) cout << "Unsafe" << '\n'; else cout << "Safe" << '\n'; } }