#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m;
vector<vector<pair<int, int>>> g;
vector<int> dist, par;
vector<bool> visited;
stack<int> topo;
void dfs(int u) {
visited[u] = true;
for (auto [v, w] : g[u]) {
if (!visited[v]) dfs(v);
}
topo.push(u);
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
g.resize(n + 1);
dist.assign(n + 1, LLONG_MIN);
par.assign(n + 1, -1);
visited.assign(n + 1, false);
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
g[u].push_back({v, 1}); // longest path -> weight = +1
}
// Topological sort
for (int i = 1; i <= n; ++i) {
if (!visited[i]) dfs(i);
}
dist[1] = 0;
while (!topo.empty()) {
int u = topo.top();
topo.pop();
if (dist[u] == LLONG_MIN) continue;
for (auto [v, w] : g[u]) {
if (dist[v] < dist[u] + w) {
dist[v] = dist[u] + w;
par[v] = u;
}
}
}
if (dist[n] == LLONG_MIN) {
cout << "IMPOSSIBLE\n";
return 0;
}
cout << dist[n] + 1 << "\n";
vector<int> path;
for (int v = n; v != -1; v = par[v]) {
path.push_back(v);
}
reverse(path.begin(), path.end());
for (int x : path) cout << x << " ";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwogCmludCBuLCBtOwp2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LCBpbnQ+Pj4gZzsKdmVjdG9yPGludD4gZGlzdCwgcGFyOwp2ZWN0b3I8Ym9vbD4gdmlzaXRlZDsKc3RhY2s8aW50PiB0b3BvOwogCnZvaWQgZGZzKGludCB1KSB7CiAgICB2aXNpdGVkW3VdID0gdHJ1ZTsKICAgIGZvciAoYXV0byBbdiwgd10gOiBnW3VdKSB7CiAgICAgICAgaWYgKCF2aXNpdGVkW3ZdKSBkZnModik7CiAgICB9CiAgICB0b3BvLnB1c2godSk7Cn0KIAppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICAKICAgIGNpbiA+PiBuID4+IG07CiAgICBnLnJlc2l6ZShuICsgMSk7CiAgICBkaXN0LmFzc2lnbihuICsgMSwgTExPTkdfTUlOKTsKICAgIHBhci5hc3NpZ24obiArIDEsIC0xKTsKICAgIHZpc2l0ZWQuYXNzaWduKG4gKyAxLCBmYWxzZSk7CiAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKSB7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBnW3VdLnB1c2hfYmFjayh7diwgMX0pOyAvLyBsb25nZXN0IHBhdGggLT4gd2VpZ2h0ID0gKzEKICAgIH0KIAogICAgLy8gVG9wb2xvZ2ljYWwgc29ydAogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgaWYgKCF2aXNpdGVkW2ldKSBkZnMoaSk7CiAgICB9CiAKICAgIGRpc3RbMV0gPSAwOwogICAgd2hpbGUgKCF0b3BvLmVtcHR5KCkpIHsKICAgICAgICBpbnQgdSA9IHRvcG8udG9wKCk7CiAgICAgICAgdG9wby5wb3AoKTsKICAgICAgICBpZiAoZGlzdFt1XSA9PSBMTE9OR19NSU4pIGNvbnRpbnVlOwogCiAgICAgICAgZm9yIChhdXRvIFt2LCB3XSA6IGdbdV0pIHsKICAgICAgICAgICAgaWYgKGRpc3Rbdl0gPCBkaXN0W3VdICsgdykgewogICAgICAgICAgICAgICAgZGlzdFt2XSA9IGRpc3RbdV0gKyB3OwogICAgICAgICAgICAgICAgcGFyW3ZdID0gdTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIAogICAgaWYgKGRpc3Rbbl0gPT0gTExPTkdfTUlOKSB7CiAgICAgICAgY291dCA8PCAiSU1QT1NTSUJMRVxuIjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KIAogICAgY291dCA8PCBkaXN0W25dICsgMSA8PCAiXG4iOwogICAgdmVjdG9yPGludD4gcGF0aDsKICAgIGZvciAoaW50IHYgPSBuOyB2ICE9IC0xOyB2ID0gcGFyW3ZdKSB7CiAgICAgICAgcGF0aC5wdXNoX2JhY2sodik7CiAgICB9CiAgICByZXZlcnNlKHBhdGguYmVnaW4oKSwgcGF0aC5lbmQoKSk7CiAgICBmb3IgKGludCB4IDogcGF0aCkgY291dCA8PCB4IDw8ICIgIjsKfQo=