#pragma GCC optimize("Ofast") #include #include #include #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 unsigned long long ull; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll myRand(ll B) { return (ull)rng() % B; } inline double time() { return static_cast(chrono::duration_cast(chrono::steady_clock::now().time_since_epoch()).count()) * 1e-9; } constexpr ll mod = 998244353; template struct Mat{ vector> A; Mat(){} Mat(size_t n,size_t m):A(n,vector(m,0)){} Mat(size_t n):A(n,vector(n,0)){}; size_t height() const{ return A.size(); } size_t width() const{ return A[0].size(); } inline const vector &operator[](int k) const{ return A.at(k); } inline vector &operator[](int k){ return A.at(k); } static Mat I(size_t n){ Mat mat(n); for(int i=0;i> C(n,vector(m,0)); for(int i=0;i>=1LL; } A.swap(B.A); return (*this); } Mat operator+(const Mat &B) const{ return (Mat(*this)+=B); } Mat operator-(const Mat &B) const{ return (Mat(*this)-=B); } Mat operator*(const Mat &B) const{ return (Mat(*this)*=B); } Mat operator^(const Mat &B) const{ return (Mat(*this)^=B); } }; int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); ll n,m,t; cin >> n >> m >> t; Mat A(n,1),B(n,n); A[0][0] = 1; for(int i=0;i> x >> y; B[x][y] = B[y][x] = 1; } B ^= t; A = B * A; cout << A[0][0] << endl; }