蒟蒻求救qwq。
#include<bits/stdc++.h>
#define int long long
#define write print
#define mkp make_pair
#define pii pair<int,int>
#define nl ln
using namespace std;
const int mod=998244353;
const int inf=1<<30;
int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-'){f=-f;}ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
void print(int x){
if(x<0){putchar('-');write(-x);return;}
if(x<=9){putchar(x+'0');return;}
else{write(x/10);putchar(x%10+'0');}
}
void println(int x){print(x);putchar('\n');}
void printsp(int x){print(x);putchar(' ');}
void jia(int &a,int b){a+=b;a+=mod;a%=mod;}
void jian(int &a,int b){a+=mod;a-=b;a%=mod;}
int n,m;
const int maxn=1005;
vector<pii>z[maxn];
int dis[maxn];
int dp[maxn];
int u[maxn],v[maxn],w[maxn];
int le[maxn][maxn];
void solve(){
memset(le,inf,sizeof(le));
n=read(),m=read();
for(int i=1;i<=m;i++){
u[i]=read(),v[i]=read(),w[i]=read();
le[u[i]][v[i]]=min(le[u[i]][v[i]],w[i]);
// le[v[i]][u[i]]=min(le[v[i]][u[i]],w[i]);
}
for(int i=1;i<=m;i++){
z[u[i]].push_back(mkp(v[i],le[u[i]][v[i]]));
// z[v[i]].push_back(mkp(u[i],le[v[i]][u[i]]));
}
memset(dp,0,sizeof(dp));
memset(dis,inf,sizeof(dis));
dis[1]=0;
dp[1]=1;
priority_queue<pii,vector<pii>,greater<pii> > q;
q.push(mkp(0,1));
while(q.size()){
int x=q.top().second;
if(dis[x]!=q.top().first) continue;
q.pop();
for(auto y:z[x]){
int e=y.first,d=y.second;
if(dis[e]>dis[x]+d){
dis[e]=dis[x]+d;
dp[e]=dp[x];
q.push(mkp(dis[e],e));
}
else if(dis[e]==dis[x]+d){
dp[e]+=dp[x];
}
}
}
if(dis[n]==inf){
puts("No answer");
}
else{
printsp(dis[n]);
println(dp[n]);
}
}
signed main(){int T=1;while(T--)solve();return 0;}