package yukicoder import kotlin.math.* import java.util.* class Main(private val args : Array) : Runnable { override fun run() { solve(args) } private fun solve(@Suppress("UNUSED_PARAMETER") args: Array) { Scanner(System.`in`).use { sc -> val N = sc.nextInt() val M = sc.nextInt() val T = sc.nextLong() val doubling = MutableList(60){MutableList(N){BooleanArray(N)} } repeat(M) { val a = sc.nextInt() val b = sc.nextInt() doubling[0][a][b] = true } for (i in 1 until 60) { for (l in 0 until N) { for (r in 0 until N) { for (m in 0 until N) { if (doubling[i - 1][l][m] and doubling[i - 1][m][r]) doubling[i][l][r] = true } } } } var ans = BooleanArray(N) ans[0] = true for (i in 0 until 60) { if ((T shr i and 1) == 0L) continue val swap = BooleanArray(N) for (l in 0 until N) { for (r in 0 until N) { if (doubling[i][l][r]) swap[r] = swap[r] or ans[l] } } ans = swap } println(ans.filter{it}.count()) } } } /** 確保するメモリの大きさ(単位: MB) */ private const val MEMORY: Long = 64 fun main(args: Array) { Thread.setDefaultUncaughtExceptionHandler { _: Thread?, e: Throwable -> e.printStackTrace() System.exit(1) } Thread(null, Main(args = args), "", MEMORY * 1048576L).start() }