#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 30001;
const int INF = 1e18;
int n, m;
vector<pair<int, int> > g[maxn];
vector<int> d1(maxn, INF);
vector<int> dn(maxn, INF);
vector<int> cnt1(maxn, 0);
vector<int> cnt2(maxn, 0);
vector<int> ans;
void dijkstra(int s, vector<int> &d, vector<int> &cnt){
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
pq.push({0, s});
d[s] = 0;
cnt[s] = 1;
while(!pq.empty()){
pair<int, int> node = pq.top(); pq.pop();
int u = node.second;
int kc = node.first;
if(kc > d[u]) continue;
for(auto &it : g[u]){
int v = it.first;
int kcv = it.second;
if(d[v] > d[u] + kcv){
cnt[v] = cnt[u];
d[v] = d[u] + kcv;
pq.push({d[v], v});
}
else if(d[v] == d[u] + kcv){
cnt[v] += cnt[u];
}
}
}
}
void solve(){
cin >> n >> m;
for(int i = 0; i < m; i++){
int u, v, d; cin >> u >> v >> d;
g[u].push_back({v, d});
g[v].push_back({u, d});
}
dijkstra(1, d1, cnt1);
dijkstra(n, dn, cnt2);
int shortest = d1[n];
for(int i = 2; i < n; i++){
if(d1[i] + dn[i] > shortest || (d1[i] + dn[i] == shortest && cnt1[i] * cnt2[i] < cnt1[n])){
ans.push_back(i);
}
}
sort(ans.begin(), ans.end());
cout << ans.size() << endl;
for(auto x : ans){
cout << x << endl;
}
}
signed main()
{
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwpjb25zdCBpbnQgbWF4biA9IDMwMDAxOwpjb25zdCBpbnQgSU5GID0gMWUxODsKaW50IG4sIG07CnZlY3RvcjxwYWlyPGludCwgaW50PiA+IGdbbWF4bl07CnZlY3RvcjxpbnQ+IGQxKG1heG4sIElORik7CnZlY3RvcjxpbnQ+IGRuKG1heG4sIElORik7CnZlY3RvcjxpbnQ+IGNudDEobWF4biwgMCk7CnZlY3RvcjxpbnQ+IGNudDIobWF4biwgMCk7CnZlY3RvcjxpbnQ+IGFuczsKdm9pZCBkaWprc3RyYShpbnQgcywgdmVjdG9yPGludD4gJmQsIHZlY3RvcjxpbnQ+ICZjbnQpewogICAgcHJpb3JpdHlfcXVldWU8cGFpcjxpbnQsIGludD4sIHZlY3RvcjxwYWlyPGludCwgaW50PiA+LCBncmVhdGVyPHBhaXI8aW50LCBpbnQ+ID4gPiBwcTsKICAgIHBxLnB1c2goezAsIHN9KTsKICAgIGRbc10gPSAwOwogICAgY250W3NdID0gMTsKICAgIHdoaWxlKCFwcS5lbXB0eSgpKXsKICAgICAgICBwYWlyPGludCwgaW50PiBub2RlID0gcHEudG9wKCk7IHBxLnBvcCgpOwogICAgICAgIGludCB1ID0gbm9kZS5zZWNvbmQ7CiAgICAgICAgaW50IGtjID0gbm9kZS5maXJzdDsKICAgICAgICBpZihrYyA+IGRbdV0pIGNvbnRpbnVlOwogICAgICAgIGZvcihhdXRvICZpdCA6IGdbdV0pewogICAgICAgICAgICBpbnQgdiA9IGl0LmZpcnN0OwogICAgICAgICAgICBpbnQga2N2ID0gaXQuc2Vjb25kOwogICAgICAgICAgICBpZihkW3ZdID4gZFt1XSArIGtjdil7CiAgICAgICAgICAgICAgICBjbnRbdl0gPSBjbnRbdV07CiAgICAgICAgICAgICAgICBkW3ZdID0gZFt1XSArIGtjdjsKICAgICAgICAgICAgICAgIHBxLnB1c2goe2Rbdl0sIHZ9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKGRbdl0gPT0gZFt1XSArIGtjdil7CiAgICAgICAgICAgICAgICBjbnRbdl0gKz0gY250W3VdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CnZvaWQgc29sdmUoKXsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbTsgaSsrKXsKICAgICAgICBpbnQgdSwgdiwgZDsgY2luID4+IHUgPj4gdiA+PiBkOwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHt2LCBkfSk7CiAgICAgICAgZ1t2XS5wdXNoX2JhY2soe3UsIGR9KTsKICAgIH0KICAgIGRpamtzdHJhKDEsIGQxLCBjbnQxKTsKICAgIGRpamtzdHJhKG4sIGRuLCBjbnQyKTsKICAgIGludCBzaG9ydGVzdCA9IGQxW25dOwogICAgZm9yKGludCBpID0gMjsgaSA8IG47IGkrKyl7CiAgICAgICAgaWYoZDFbaV0gKyBkbltpXSA+IHNob3J0ZXN0IHx8IChkMVtpXSArIGRuW2ldID09IHNob3J0ZXN0ICYmIGNudDFbaV0gKiBjbnQyW2ldIDwgY250MVtuXSkpewogICAgICAgICAgICBhbnMucHVzaF9iYWNrKGkpOwogICAgICAgIH0KICAgIH0KICAgIHNvcnQoYW5zLmJlZ2luKCksIGFucy5lbmQoKSk7CiAgICBjb3V0IDw8IGFucy5zaXplKCkgPDwgZW5kbDsKICAgIGZvcihhdXRvIHggOiBhbnMpewogICAgICAgIGNvdXQgPDwgeCA8PCBlbmRsOwogICAgfQp9CnNpZ25lZCBtYWluKCkKewogICAgc29sdmUoKTsKCiAgICByZXR1cm4gMDsKfQ==