#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int LL; typedef pair P; typedef pair LP; const int INF=1<<30; const LL MAX=1e9+7; void array_show(int *array,int array_n,char middle=' '){ for(int i=0;i &vec_s,int vec_n=-1,char middle=' '){ if(vec_n==-1)vec_n=vec_s.size(); for(int i=0;i &vec_s,int vec_n=-1,char middle=' '){ if(vec_n==-1)vec_n=vec_s.size(); for(int i=0;i T; vector> path; LL cnt[220000][2]; bool used[220000]; int deg[220000]; void dfs(int pos){ if(used[pos])return; used[pos]=true; int a,b,c; for(auto node:path[pos]){ tie(a,b,c)=node; dfs(a); } } void solve(){ int n,m; int i,j,k; LL a,b,c,d; cin>>n>>m; n++; path.assign(n,vector()); for(i=0;i>a>>b>>c>>d; path[a].push_back(make_tuple(b,c,d)); } dfs(0); for(i=0;i q1; q1.push(0); cnt[0][1]=1; while(!q1.empty()){ a=q1.front();q1.pop(); cnt[a][0]%=MAX,cnt[a][1]%=MAX; if(a==n-1){ cout<