#include<iostream>
using namespace std;
int adj[2001][2001];
int d[2001];
int num[2001]={0};
bool vis[2001];
const int inf=100000001;
int n,m;
void dij()
{ int i;
for(i=1;i<=n;i++)
{
d[i]=inf;
}
d[1]=0;
num[1]=1;
for(i=1;i<=n;i++)
{
int u=-1;
int min=inf;
for(int j=1;j<=n;j++)
{
if(vis[j]==false&&d[j]<min)
{
u=j;
min=d[j];
}
}
if(u==-1) break;
vis[u]=true;
for(int v=1;v<=n;v++)
{
if(vis[v]==false)
{
if(adj[u][v]+d[u]<d[v])
{
d[v]=adj[u][v]+d[u];
num[v]=num[u];
}
else if(adj[u][v]+d[u]==d[v])
{
num[v]+=num[u];
}
}
}
}
}
int main()
{
int i;
fill(adj[0],adj[0]+2001*2001,inf);
cin>>n>>m;
int x,y,l;
for(i=1;i<=n;i++)
{
vis[i]=false;
}
for(i=1;i<=m;i++)
{
cin>>x>>y>>l;
adj[x][y]=l;
}
dij();
if(d[n]!=inf)
cout<<d[n]<<" "<<num[n];
else
cout<<"No answer";
return 0;
}