#include<bits/stdc++.h>
using namespace std;
const int64_t inf = 1e18;
const int N = 5005;
struct Dijkstra{
int u;
int64_t d;
bool operator < (const Dijkstra &oth) const{
return oth.d>d;
}
};
int64_t dist[N], dp[N];
int main(){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n, m; cin >> n >> m;
vector<vector<pair<int, int64_t> > > adj(n + 1);
for(int i=0; i<m; i++){
int t, u, v, l;
cin >> t >> u >> v >> l;
adj[u].push_back({v, l});
if (t==2) adj[v].push_back({u, l});
}
//khoi tao
for(int i=1; i<=n; i++){
dp[i] = 0;
dist[i] = inf;
}
dp[1] = 1; dist[1] = 0;
//dijkstra
priority_queue<Dijkstra> pq;
pq.push({1, 0});
while (pq.size()){
int u = pq.top().u;
int cur = pq.top().d;
pq.pop();
for(int i=0; i<adj[u].size(); i++){
int v = adj[u][i].first;
int64_t w = adj[u][i].second;
if (dist[v] > dist[u] + w){
dist[v] = dist[u] + w;
dp[v] = dp[u];
pq.push({v, dist[v]});
}
else if (dist[v]==dist[u] + w){
//tong so duong di ngan nhat tu 1 den v cong voi tong so duong di ngan nhat tu 1 den u
dp[v] += dp[u];
}
}
}
cout << dist[n] << " " << dp[n];
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludDY0X3QgaW5mID0gMWUxODsKY29uc3QgaW50IE4gPSA1MDA1OwoKc3RydWN0IERpamtzdHJhewogICAgaW50IHU7CiAgICBpbnQ2NF90IGQ7CiAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IERpamtzdHJhICZvdGgpIGNvbnN0ewogICAgICAgIHJldHVybiBvdGguZD5kOwogICAgfQp9OwoKaW50NjRfdCBkaXN0W05dLCBkcFtOXTsKCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaW50IG4sIG07IGNpbiA+PiBuID4+IG07CiAgICB2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LCBpbnQ2NF90PiA+ID4gYWRqKG4gKyAxKTsKICAgIGZvcihpbnQgaT0wOyBpPG07IGkrKyl7CiAgICAgICAgaW50IHQsIHUsIHYsIGw7CiAgICAgICAgY2luID4+IHQgPj4gdSA+PiB2ID4+IGw7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh7diwgbH0pOwogICAgICAgIGlmICh0PT0yKSBhZGpbdl0ucHVzaF9iYWNrKHt1LCBsfSk7CiAgICB9CiAgICAvL2tob2kgdGFvCiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKXsKICAgICAgICBkcFtpXSA9IDA7CiAgICAgICAgZGlzdFtpXSA9IGluZjsKICAgIH0KICAgIGRwWzFdID0gMTsgZGlzdFsxXSA9IDA7IAogICAgLy9kaWprc3RyYQogICAgcHJpb3JpdHlfcXVldWU8RGlqa3N0cmE+IHBxOwogICAgcHEucHVzaCh7MSwgMH0pOwogICAgd2hpbGUgKHBxLnNpemUoKSl7CiAgICAgICAgaW50IHUgPSBwcS50b3AoKS51OwogICAgICAgIGludCBjdXIgPSBwcS50b3AoKS5kOwogICAgICAgIHBxLnBvcCgpOwogICAgICAgIGZvcihpbnQgaT0wOyBpPGFkalt1XS5zaXplKCk7IGkrKyl7CiAgICAgICAgICAgIGludCB2ID0gYWRqW3VdW2ldLmZpcnN0OwogICAgICAgICAgICBpbnQ2NF90IHcgPSBhZGpbdV1baV0uc2Vjb25kOwogICAgICAgICAgICBpZiAoZGlzdFt2XSA+IGRpc3RbdV0gKyB3KXsKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgdzsKICAgICAgICAgICAgICAgIGRwW3ZdID0gZHBbdV07CiAgICAgICAgICAgICAgICBwcS5wdXNoKHt2LCBkaXN0W3ZdfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoZGlzdFt2XT09ZGlzdFt1XSArIHcpewogICAgICAgICAgICAgICAgLy90b25nIHNvIGR1b25nIGRpIG5nYW4gbmhhdCB0dSAxIGRlbiB2IGNvbmcgdm9pIHRvbmcgc28gZHVvbmcgZGkgbmdhbiBuaGF0IHR1IDEgZGVuIHUKICAgICAgICAgICAgICAgIGRwW3ZdICs9IGRwW3VdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBkaXN0W25dIDw8ICIgIiA8PCBkcFtuXTsKICAgIHJldHVybiAwOwp9