#include
#include
#include
using namespace std;
struct node{
int index;
int cost;
int snow;
node(){
}
node( int _index, int _cost, int _snow){
index=_index;
cost=_cost;
snow=_snow;
}
bool operator < (const node&tmp) const{
return cost>tmp.cost;
}
};
int main()
{
int N;
int M;
cin>>N>>M;
vector v[N + 1];
for(int x=0; x>a>>b>>c>>d;
v[a].push_back(node(b, c, d));
v[b].push_back(node(a, c, d));
}
priority_queuepq;
pq.push(node(1, 0, 1));
bool matrica[N + 1];
for(int x1=0; x1 <= N; x1++){
matrica[x1]=false;
}
while(!pq.empty()){
node c=pq.top();
pq.pop();
matrica[c.index]=true;
if(c.index==N){
cout<