#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); int n, m; cin >> n >> m; vector a(10); for (int i = 0; i < 10; i++) { cin >> a[i]; } vector> adj(n + 1); vector indeg(n + 1, 0); vector outdeg(n + 1, 0); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); indeg[v]++; outdeg[u]++; } int start = -1; for (int i = 1; i <= n; i++) { if (indeg[i] == 0) { start = i; break; } } if (start == -1) { start = 1; } // sort adj by outdeg ascending for (int u = 1; u <= n; u++) { sort(adj[u].begin(), adj[u].end(), [&](int x, int y) { return outdeg[x] < outdeg[y]; }); } // now backtracking vector pathh; vector vis(n + 1, 0); vector best; int maxk = 0; auto dfs = [&](auto&& self, int u, int cnt) -> void { int num_ext = 0; for (int v : adj[u]) { if (vis[v] == 0) { num_ext++; pathh.push_back(v); vis[v] = 1; self(self, v, cnt + 1); pathh.pop_back(); vis[v] = 0; } } if (num_ext == 0) { if (cnt > maxk) { maxk = cnt; best = pathh; } } }; pathh.reserve(n + 1); pathh.push_back(start); vis[start] = 1; dfs(dfs, start, 1); // output cout << maxk << '\n'; for (size_t i = 0; i < best.size(); i++) { cout << best[i]; if (i + 1 < best.size()) cout << " "; else cout << '\n'; } return 0; }