#include #include #include #include using namespace std; using ll=long long; #include using mint=atcoder::modint998244353; ostream& operator<<(ostream& os,mint& x){ os<>(istream& is,mint& x){ int t; is>>t; x=t; return is; } template ostream& operator<<(ostream& os,const pair& p); template istream& operator>>(istream& is,pair& p); template ostream& operator<<(ostream& os,const array& arr); template istream& operator>>(istream& is,array& arr); template ostream& operator<<(ostream& os,const vector& vec); template istream& operator>>(istream& is,vector& vec); template ostream& operator<<(ostream& os,pair& p){ os< istream& operator>>(istream& is,pair& p){ is>>p.first>>p.second; return is; } template ostream& operator<<(ostream& os,array& arr){ for(int i=0;i istream& operator>>(istream& is,array& arr){ for(int i=0;i>arr[i]; return is; } template ostream& operator<<(ostream& os,vector& vec){ for(int i=0;i istream& operator>>(istream& is,vector& vec){ for(int i=0;i>vec[i]; return is; } template vector make_unique(vector vec){ ranges::sort(vec); vec.erase(unique(vec.begin(),vec.end()),vec.end()); return vec; } template vector make_rank(vector vec){ int n=vec.size(); vector res(n); iota(res.begin(),res.end(),0); ranges::sort(vec,{},[&](int i)->T{ return vec[i]; }); return res; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int n; cin>>n; int m; cin>>m; vector> mat(n,vector(n)); vector> graph(n); for(int i=0;i>u>>v; u--;v--; graph[u].push_back(v); graph[v].push_back(u); } for(int i=0;i>s>>t>>a>>b; a--;b--;s--;t--; auto f=[&](ll x,ll y,ll l)->mint{ auto matt=mat; vector> e(n,vector(n)); for(int i=0;i0){ if(l&1){ vector> ne(n,vector(n)); for(int i=0;i> nmat(n,vector(n)); for(int i=0;i>=1; } //cout<