#include using namespace std; typedef long long lint; typedef pair P; struct edge{int to; lint cost;}; const int MAX_N = (int)2e5 + 5; const lint INF = (lint)1e16; int N, M; lint dist[MAX_N]; vector G[MAX_N]; void dijkstra(int s){ priority_queue, greater

> pq; for(int i=0;i<2*N;i++) dist[i] = INF; dist[0] = dist[N] = 0; pq.push({0, 0}); while(!pq.empty()){ P p = pq.top(); pq.pop(); if(dist[p.second]dist[u]+v.cost){ dist[v.to] = dist[u] + v.cost; pq.push({dist[v.to], v.to}); } } } } int main(){ scanf("%d %d", &N, &M); for(int i=0;i