#include using namespace std; typedef long long ll; typedef vector vi; typedef vector vl; typedef pair pii; typedef pair pll; typedef int _loop_int; #define REP(i,n) for(_loop_int i=0;i<(_loop_int)(n);++i) #define FOR(i,a,b) for(_loop_int i=(_loop_int)(a);i<(_loop_int)(b);++i) #define FORR(i,a,b) for(_loop_int i=(_loop_int)(b)-1;i>=(_loop_int)(a);--i) #define DEBUG(x) cout<<#x<<": "< P; int n,m; vector g[125252]; int inn[125252]; int mxd[125252]; int mnd[125252]; vector rev[125252]; int inn2[125252]; int d2[125252]; int crit[125252]; int main(){ scanf("%d%d",&n,&m); REP(i,m){ int a,b,c; scanf("%d%d%d",&a,&b,&c); g[a].push_back(pii(b,c)); rev[b].push_back(pii(a,c)); inn[b]++; inn2[a]++; } vi V; REP(i,n)mxd[i]=-1, mnd[i]=1e9, d2[i]=1e9; V.clear(); mxd[0] = mnd[0] = 0; REP(i,n)if(inn[i]==0)V.push_back(i); REP(i,n){ int p = V[i]; for(pii P:g[p]){ CHMIN(mnd[P.first],mxd[p]+P.second); CHMAX(mxd[P.first],mxd[p]+P.second); if(--inn[P.first]==0)V.push_back(P.first); } } V.clear(); d2[n-1] = mxd[n-1]; REP(i,n)if(inn2[i]==0)V.push_back(i); REP(i,n){ int p = V[i]; for(pii P:rev[p]){ CHMIN(d2[P.first],d2[p]-P.second); if(--inn2[P.first]==0)V.push_back(P.first); } } int ans = n; REP(i,n)if(d2[i]==mxd[i])ans--; printf("%d %d/%d\n",mxd[n-1],ans,n); return 0; }