func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<long long int> adj[200005];   vector<int> visited(200005, 0);   vector<long long int> ans;   void topo(long long int s) {     visited[s] = 1;     long long int sz = adj[s].size();     for (long long int i = 0; i < sz; i++) {       if (visited[adj[s][i]] == 0) topo(adj[s][i]);     }     ans.push_back(s);   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     long long int w;     cin >> w;     while (w--) {       long long int t, x, y, n, m;       cin >> n >> m;       vector<pair<long long int, long long int> > anso;       vector<pair<long long int, long long int> > edg;       for (long long int i = 1; i <= n; i++) {         visited[i] = 0;         adj[i].clear();       }       ans.clear();       for (long long int i = 0; i <= m - 1; i++) {         cin >> t >> x >> y;         if (t == 1) {           adj[x].push_back(y);           anso.push_back({x, y});         } else {           edg.push_back({x, y});         }       }       long long int fou = 0;       for (long long int i = 1; i <= n; i++) {         if (!visited[i]) topo(i);       }       reverse((ans).begin(), (ans).end());       vector<long long int> pre(n + 1, 0);       for (long long int i = 0; i < n; i++) {         pre[ans[i]] = i + 1;       }       for (long long int i = 0; i < anso.size(); i++) {         if (pre[anso[i].first] > pre[anso[i].second]) {           fou = 1;           break;         }       }       if (fou) {         cout <<  NO  <<   n ;         continue;       } else {         cout <<  YES  <<   n ;       }       long long int sz = edg.size();       for (long long int i = 0; i < sz; i++) {         if (pre[edg[i].first] < pre[edg[i].second]) {           anso.push_back({edg[i].first, edg[i].second});         } else {           anso.push_back({edg[i].second, edg[i].first});         }       }       for (auto i : anso) {         cout << i.first <<     << i.second <<   n ;       }     }     return 0;   }   