#include <bits/stdc++.h>
#define FNAME "CENTER"
using namespace std;
typedef long long ll;
const int MAXN = (int)3e4 + 5;
const int LIM = (int)1e5 + 1;
const long long MOD = (long long)1e13 + 15092007;
#define xd '\n'
#define fi first
#define se second
const long long base = (long long)256;
const long long INF = (long long)1e12;
template<class X, class Y> bool minimize(X &a, Y b) {if(a>b){a=b;return true;}return false;};
template<class X, class Y> bool maximize(X &a, Y b) {if(a<b){a=b;return true;}return false;};
void HuuThien() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(FNAME".inp", "r")) {
freopen(FNAME".inp", "r", stdin);
freopen(FNAME".out", "w", stdout);
}
}
int n, m;
vector<long long> d1(MAXN, INF), d2(MAXN, INF), c1(MAXN, 0), c2(MAXN, 0);
struct Node{
int u, w;
};
vector<Node> adj[MAXN];
void Init() {
cin >> n >> m;
for(int i = 1; i <= m ; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
adj[v].push_back({u, w});
}
}
void Dijkstra(int s, int choose) {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
if(choose == 1) {
d1[s] = 0;
c1[s] = 1;
pq.push({0, s});
} else {
d2[s] = 0;
c2[s] = 1;
pq.push({0, s});
}
while(!pq.empty()) {
pair<int, int> top = pq.top();
pq.pop();
int u = top.second;
int dis = top.first;
if(choose == 1) {
if(dis > d1[u]) continue;
} else {
if(dis > d2[u]) continue;
}
for(Node e : adj[u]) {
int v = e.u;
int w = e.w;
if(choose == 1) {
if(d1[v] > d1[u] + w) {
d1[v] = d1[u] + w;
c1[v] = c1[u];
pq.push({d1[v], v});
} else if(d1[v] == d1[u] + w) {
c1[v] += c1[u];
}
} else {
if(d2[v] > d2[u] + w) {
d2[v] = d2[u] + w;
c2[v] = c2[u];
pq.push({d2[v], v});
} else if(d2[v] == d2[u] + w) {
c2[v] += c2[u];
}
}
}
}
}
void Solve() {
Dijkstra(1, 1);
Dijkstra(n, 2);
int res = 0;
vector<int> ans;
for(int i = 1; i <= n ; i++) {
if((d1[i] + d2[i] != d1[n]) || ((c1[i] * c2[i]) != c1[n] && (d1[i] + d2[i]) == d1[n])) {
res++;
ans.push_back(i);
}
}
cout << res << xd;
for(int x : ans) {
cout << x << xd;
}
}
signed main() {
HuuThien();
Init();
Solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk5BTUUgIkNFTlRFUiIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmNvbnN0IGludCBNQVhOID0gKGludCkzZTQgKyA1Owpjb25zdCBpbnQgTElNID0gKGludCkxZTUgKyAxOwpjb25zdCBsb25nIGxvbmcgTU9EID0gKGxvbmcgbG9uZykxZTEzICsgMTUwOTIwMDc7CiNkZWZpbmUgeGQgJ1xuJyAKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZApjb25zdCBsb25nIGxvbmcgYmFzZSA9IChsb25nIGxvbmcpMjU2Owpjb25zdCBsb25nIGxvbmcgSU5GID0gKGxvbmcgbG9uZykxZTEyOwp0ZW1wbGF0ZTxjbGFzcyBYLCBjbGFzcyBZPiBib29sIG1pbmltaXplKFggJmEsIFkgYikge2lmKGE+Yil7YT1iO3JldHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fTsKdGVtcGxhdGU8Y2xhc3MgWCwgY2xhc3MgWT4gYm9vbCBtYXhpbWl6ZShYICZhLCBZIGIpIHtpZihhPGIpe2E9YjtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO307Cgp2b2lkIEh1dVRoaWVuKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOyAgICAKICAgIGlmIChmb3BlbihGTkFNRSIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oRk5BTUUiLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oRk5BTUUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KfQoKaW50IG4sIG07CnZlY3Rvcjxsb25nIGxvbmc+IGQxKE1BWE4sIElORiksIGQyKE1BWE4sIElORiksIGMxKE1BWE4sIDApLCBjMihNQVhOLCAwKTsKCnN0cnVjdCBOb2RlewogICAgaW50IHUsIHc7Cn07Cgp2ZWN0b3I8Tm9kZT4gYWRqW01BWE5dOwoKdm9pZCBJbml0KCkgewogICAgY2luID4+IG4gPj4gbTsKCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG0gOyBpKyspIHsKICAgICAgICBpbnQgdSwgdiwgdzsKICAgICAgICBjaW4gPj4gdSA+PiB2ID4+IHc7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh7diwgd30pOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2soe3UsIHd9KTsKICAgIH0KfQoKdm9pZCBEaWprc3RyYShpbnQgcywgaW50IGNob29zZSkgewogICAgcHJpb3JpdHlfcXVldWU8cGFpcjxpbnQsIGludD4sIHZlY3RvcjxwYWlyPGludCwgaW50Pj4sIGdyZWF0ZXI8cGFpcjxpbnQsIGludD4+PiBwcTsKICAgIAogICAgaWYoY2hvb3NlID09IDEpIHsKICAgICAgICBkMVtzXSA9IDA7CiAgICAgICAgYzFbc10gPSAxOwogICAgICAgIHBxLnB1c2goezAsIHN9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgZDJbc10gPSAwOwogICAgICAgIGMyW3NdID0gMTsKICAgICAgICBwcS5wdXNoKHswLCBzfSk7CiAgICB9CgogICAgd2hpbGUoIXBxLmVtcHR5KCkpIHsKICAgICAgICBwYWlyPGludCwgaW50PiB0b3AgPSBwcS50b3AoKTsKICAgICAgICBwcS5wb3AoKTsKCiAgICAgICAgaW50IHUgPSB0b3Auc2Vjb25kOwogICAgICAgIGludCBkaXMgPSB0b3AuZmlyc3Q7CgogICAgICAgIGlmKGNob29zZSA9PSAxKSB7CiAgICAgICAgICAgIGlmKGRpcyA+IGQxW3VdKSBjb250aW51ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZihkaXMgPiBkMlt1XSkgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBmb3IoTm9kZSBlIDogYWRqW3VdKSB7CiAgICAgICAgICAgIGludCB2ID0gZS51OwogICAgICAgICAgICBpbnQgdyA9IGUudzsKICAgICAgICAgICAgaWYoY2hvb3NlID09IDEpIHsKICAgICAgICAgICAgICAgIGlmKGQxW3ZdID4gZDFbdV0gKyB3KSB7CiAgICAgICAgICAgICAgICAgICAgZDFbdl0gPSBkMVt1XSArIHc7CiAgICAgICAgICAgICAgICAgICAgYzFbdl0gPSBjMVt1XTsKICAgICAgICAgICAgICAgICAgICBwcS5wdXNoKHtkMVt2XSwgdn0pOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmKGQxW3ZdID09IGQxW3VdICsgdykgewogICAgICAgICAgICAgICAgICAgIGMxW3ZdICs9IGMxW3VdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYoZDJbdl0gPiBkMlt1XSArIHcpIHsKICAgICAgICAgICAgICAgICAgICBkMlt2XSA9IGQyW3VdICsgdzsKICAgICAgICAgICAgICAgICAgICBjMlt2XSA9IGMyW3VdOwogICAgICAgICAgICAgICAgICAgIHBxLnB1c2goe2QyW3ZdLCB2fSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYoZDJbdl0gPT0gZDJbdV0gKyB3KSB7CiAgICAgICAgICAgICAgICAgICAgYzJbdl0gKz0gYzJbdV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfQoKfQoKdm9pZCBTb2x2ZSgpIHsKICAgIERpamtzdHJhKDEsIDEpOwogICAgRGlqa3N0cmEobiwgMik7CgogICAgaW50IHJlcyA9IDA7CgogICAgdmVjdG9yPGludD4gYW5zOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuIDsgaSsrKSB7CiAgICAgICAgaWYoKGQxW2ldICsgZDJbaV0gIT0gZDFbbl0pIHx8ICgoYzFbaV0gKiBjMltpXSkgIT0gYzFbbl0gJiYgKGQxW2ldICsgZDJbaV0pID09IGQxW25dKSkgewogICAgICAgICAgICByZXMrKzsKICAgICAgICAgICAgYW5zLnB1c2hfYmFjayhpKTsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCByZXMgPDwgeGQ7CiAgICAKICAgIGZvcihpbnQgeCA6IGFucykgewogICAgICAgIGNvdXQgPDwgeCA8PCB4ZDsKICAgIH0KfQoKc2lnbmVkIG1haW4oKSB7CiAgICBIdXVUaGllbigpOwogICAgSW5pdCgpOwogICAgU29sdmUoKTsKICAgIHJldHVybiAwOwp9