#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; if (!(cin >> n >> m)) return 0; vector a(10); for (int i = 0; i < 10; ++i) cin >> a[i]; vector> adj(n + 1); vector indeg(n + 1, 0), outdeg(n + 1, 0); for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; if (u < 1 || u > n || v < 1 || v > n) continue; // safety adj[u].push_back(v); ++outdeg[u]; ++indeg[v]; } // Choose start vertex as one with minimal in-degree int start = 1; for (int i = 2; i <= n; ++i) { if (indeg[i] < indeg[start]) start = i; } vector visited(n + 1, 0); vector path; path.reserve(n); int cur = start; visited[cur] = 1; path.push_back(cur); while (true) { int bestScore = -1; int nxt = -1; for (int to : adj[cur]) { if (!visited[to]) { int score = outdeg[to]; if (score > bestScore) { bestScore = score; nxt = to; } } } if (nxt == -1) break; cur = nxt; visited[cur] = 1; path.push_back(cur); } cout << path.size() << '\n'; for (size_t i = 0; i < path.size(); ++i) { if (i) cout << ' '; cout << path[i]; } cout << '\n'; return 0; }