#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef DEBUG #include "library/Utility/debug.cpp" #else #define debug(...) #endif #define rep(i,n) for(int i=0;i<(n);++i) #define EL '\n' #define print(i) std::cout << (i) << '\n' #define all(v) (v).begin(), (v).end() using lnt = long long; struct FIO{FIO(){std::cin.tie(0);std::ios_base::sync_with_stdio(0);std::cout< using V = std::vector; template void fill(V&v) { for(T&e:v) std::cin >> e; } /*-*/ template struct matrix // designed for int and modint(not yet validated) { const int n,m; std::vector > data; matrix(int n, int m, T k=0) : n(n),m(m),data(n,std::vector(m,k)) {} matrix& operator+=(const matrix& a) { for(int i=0;i0) product.data[i][j]=1; } data=product.data; return *this; } matrix operator+(const matrix& a) const { return matrix(*this) += a; } matrix operator-(const matrix& a) const { return matrix(*this) -= a; } matrix operator*(const matrix& a) const { return matrix(*this) *= a; } bool operator==(const matrix& a) const { return data==a.data; } matrix transpose() const { matrix t(m,n); for(int i=0;i>=1; } return r; } matrix det() const { assert(n==m); matrix A(*this); T d = A.GaussianElimination(); T o = 1; for(int i=0;i std::ostream& operator<<(std::ostream& o,const matrix& a){ for(int i=0;i> n >> m >> t; matrix g(n,n,0); rep(i,m) { int a,b; std::cin >> a >> b; g.data[a][b]=1; } matrix x = g.pow(t); int ans=0; rep(i,n) ans+=x.data[0][i]; print(ans); }