#include <bits/stdc++.h>
using namespace std;
void solve() {
  long long T;
  cin >> T;
  while (T--) {
    long long n, m;
    cin >> n >> m;
    vector<vector<long long> > gr(n);
    for (signed i = 0; i < m; i++) {
      long long a;
      cin >> a;
      long long b;
      cin >> b;
      a--;
      b--;
      gr[a].push_back(b);
    }
    vector<bool> vis(n, false);
    vector<long long> order;
    order.reserve(n);
    function<void(long long)> dfs = [&](long long v) {
      vis[v] = true;
      for (const auto &x : gr[v])
        if (!vis[x]) dfs(x);
      order.push_back(v);
    };
    for (signed i = 0; i < n; i++)
      if (!vis[i]) dfs(i);
    reverse(order.begin(), order.end());
    vector<long long> depth(n, -1);
    set<long long> ans;
    for (long long i : order) {
      if (depth[i] == -1) {
        depth[i] = 0;
        for (const auto &x : gr[i])
          if (depth[x] == -1) depth[x] = 1;
      } else if (depth[i] == 1) {
        for (const auto &x : gr[i]) {
          depth[x] = 0;
          ans.insert(x + 1);
        }
      }
    }
    cout << ans.size() << '\n';
    for (const auto &x : ans) cout << x << ' ';
    cout << '\n';
  }
}
signed main(signed argc, char **argv) {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  if (argc > 1 && (string)argv[1] == "local") {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    solve();
    while (cin.peek() != EOF) {
      if (isspace(cin.peek()))
        cin.get();
      else {
        cout << '\n';
        solve();
      }
    }
  } else {
    solve();
  }
  return 0;
}
