#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int w=0,x=0;char ch;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return w?-x:x;
}
int n,m;
int g,h,ph;
int mapl[2005][2005];
bool vis[20005];
int cnt[2005];
int dis[20005];
int s=1;
inline void add(int u,int v,int len){
if(len!=mapl[u][v]) mapl[u][v]=len;
}
inline void spfa(){
queue <int > q;
memset(dis,0x3f,sizeof(dis));
vis[s]=1;
cnt[s]=1;
dis[s]=0;
q.push(s);
while(!q.empty()){
register int now=q.front();
q.pop();
for(register int i=1;i<=n;++i){
if(mapl[now][i]==0) continue;
register int to=i,l=mapl[now][i];
if(dis[to]>dis[now]+l){
dis[to]=dis[now]+l;
cnt[to]=cnt[now];
if(!vis[to]){
vis[to]=1;
q.push(to);
}
}
else if(dis[to]==dis[now]+l){
cnt[to]+=cnt[now];
}
else cnt[to]+=0;
}
vis[now]=0;
}
}
signed main(){
n=read(),m=read();
for(register int i=1;i<=m;++i){
g=read(),h=read(),ph=read();
if(g!=h) add(g,h,ph);
}
spfa();
if(dis[n]==0x3f3f3f3f) puts("No answer");
else cout<<dis[n]<<" "<<cnt[n];
return 0;
}