#include #include using namespace std; using i64 = long long; struct edge { int to, cost; }; int n, m; vector> G; vector> dp; vector is_start; // uをひとつ作るのに必要なvの個数 i64 rec(int u, int v) { i64 &res = dp[u][v]; if(res != -1) { return res; } if(u == v) { return res = 1; } res = 0; for(edge e : G[u]) { res += rec(e.to, v) * e.cost; } return res; } int main(void) { scanf("%d%d", &n, &m); G.assign(n, vector()); is_start.assign(n, true); is_start[n-1] = false; for(int i=0; i(n, -1)); for(int i=0; i