
fun main(args: Array<String>) {

    RemovingCoins.init()
    RemovingCoins.execute()

}

class RemovingCoins {

    companion object {

        var N = 0

        var mostFarIndex = 0

        lateinit var matrix: Array<MutableList<Int>>

        fun init() {

            N = readLine()!!.toInt()

            matrix = Array(N) {
                mutableListOf<Int>()
            }

            for (index in 1 until N) {
                val inputs = readLine()!!.split(" ").map(String::toInt)
                matrix[inputs[0] - 1].add(inputs[1] - 1)
                matrix[inputs[1] - 1].add(inputs[0] - 1)
            }

        }

        fun execute() {
            val diametor = calcDiameter()

            if (diametor % 3 == 2) {
                println("Second")
            } else {
                println("First")
            }
        }

        /**
         * 木の直径を求める
         */
        fun calcDiameter(): Int {
            val maxDepthInfo = bfs(0, 0, 0)

//            println(maxDepthInfo)

            val maxDepthInfo2 = bfs(0, maxDepthInfo[1], maxDepthInfo[1])

//            println(maxDepthInfo2)
            // 直径=最大深さ+1
            return maxDepthInfo2[0] + 1
        }

        /**
         * 最大深さとindexを算出
         * 0=>深さ
         * 1=>最大深さのindex
         */
        fun bfs(depth: Int, index: Int, from: Int): MutableList<Int> {

            var maxDepth = mutableListOf(depth, index)
            matrix[index].forEach loop1@{

                // 来た辺には戻らない
                if (it == from) return@loop1

                val targetDepth = bfs(depth + 1, it, index)

                if (maxDepth[0] < targetDepth[0]) {

                    maxDepth = targetDepth
                }
            }

            return maxDepth
        }
    }
}




