#include <bits/stdc++.h>
#define N 1501
using namespace std;
struct pt { int u,k; };
pt h[N];
vector <int> a[N],c[N],vec;
const int oo=round(1e9);
int u,v,k,n,m,i,f[N][N],d[N],vt[N],nh,ma,dd[N];
void up(int u)
{
    while(1)
    {
        int p=u/2;
        if(p==0 || h[p].k<h[u].k) break;
        swap(vt[h[u].u],vt[h[p].u]);
        swap(h[u],h[p]);
        u=p;
    }
}
void down(int u)
{
    while(1)
    {
        int p=u*2;
        if(p<nh && h[p+1].k<h[p].k) p++;
        if(p>nh || h[p].k>h[u].k) break;
        swap(vt[h[u].u],vt[h[p].u]);
        swap(h[u],h[p]);
        u=p;
    }
}
void push(int u,int k)
{
    h[++nh]={ u,k }; vt[u]=nh;
    up(nh);
}
void pop()
{
    swap(h[1],h[nh--]); vt[h[1].u]=1;
    down(1);
}
void dijkstraf(int s)
{
    nh=0;
    for(int u=1;u<=n;u++) { vt[u]=0; f[s][u]=oo; }
    f[s][s]=0; push(s,0);
    while(nh>0)
    {
        int u=h[1].u; pop();
        ma=max(ma,f[s][u]);
        for(int i=0;i<a[u].size();i++)
        {
            int v=a[u][i];
            if(f[s][v]>f[s][u]+c[u][i])
            {
                f[s][v]=f[s][u]+c[u][i];
                if(vt[v]==0) push(v,f[s][v]);
                else { h[vt[v]].k=f[s][v]; up(vt[v]); }
            }
        }
    }
}
void dijkstrad(int s)
{
    nh=0;
    for(int u=1;u<=n;u++) { vt[u]=0; d[u]=oo; }
    for(int u=1;u<=n;u++)
        if(f[s][u]==ma) { d[u]=0; push(u,0); }
    while(nh>0)
    {
        int u=h[1].u; pop();
        if(f[s][u]+d[u]==ma) dd[u]=1;
        for(int i=0;i<a[u].size();i++)
        {
            int v=a[u][i];
            if(d[v]>d[u]+c[u][i])
            {
                d[v]=d[u]+c[u][i];
                if(vt[v]==0) push(v,d[v]);
                else { h[vt[v]].k=d[v]; up(vt[v]); }
            }
        }
    }
}
int main()
{
    //freopen("ztown.inp","r",stdin);
    //freopen("Ztown.out","w",stdout);
    cin>>n>>m;
    while(m--)
    {
        cin>>u>>v>>k;
        a[u].push_back(v); a[v].push_back(u);
        c[u].push_back(k); c[v].push_back(k);
    }
    for(u=1;u<=n;u++) dijkstraf(u);
    for(u=1;u<=n;u++) dijkstrad(u);
    for(u=1;u<=n;u++)
        if(dd[u]==0) vec.push_back(u);
    cout<<vec.size()<<'\n';
    for(i=0;i<vec.size();i++) cout<<vec[i]<<'\n';
}

