N = int(eval(input()))

src = [tuple([int(x)-1 for x in input().split()]) for i in range(N-1)]

es = [[] for i in range(N)]

for a,b in src:

    es[a].append(b)

    es[b].append(a)



def farthest_node_and_dist(s):

    dist = [N]*N

    dist[s] = 0

    stack = [s]

    ret_node = -1

    ret_dist = 0

    while stack:

        v = stack.pop()

        d = dist[v]

        for to in es[v]:

            if d+1 < dist[to]:

                dist[to] = d+1

                stack.append(to)

                if ret_dist < d+1:

                    ret_dist = d+1

                    ret_node = to

    return (ret_node, ret_dist)



n,d = farthest_node_and_dist(0)

n,d = farthest_node_and_dist(n)

print(('Second' if d%3==1 else 'First'))
import sys

input = sys.stdin.readline

sys.setrecursionlimit(10**8)

N = int(eval(input()))

AB = [tuple(map(int,input().split())) for i in range(N-1)]

es = [[] for _ in range(N)]

for a,b in AB:

    a,b = a-1,b-1

    es[a].append(b)

    es[b].append(a)



depth = [0] * N

def dfs(v,p=-1):

    for to in es[v]:

        if to==p: continue

        depth[to] = depth[v] + 1

        dfs(to,v)

dfs(0)

mxd = max(depth)

i = depth.index(mxd)

depth = [0] * N

dfs(i)



diameter = max(depth)

print(('Second' if diameter%3==1 else 'First'))
N = int(eval(input()))
src = [tuple([int(x) - 1 for x in input().split()]) for i in range(N - 1)]
es = [[] for i in range(N)]
for a, b in src:
    es[a].append(b)
    es[b].append(a)


def farthest_node_and_dist(s):
    dist = [N] * N
    dist[s] = 0
    stack = [s]
    ret_node = -1
    ret_dist = 0
    while stack:
        v = stack.pop()
        d = dist[v]
        for to in es[v]:
            if d + 1 < dist[to]:
                dist[to] = d + 1
                stack.append(to)
                if ret_dist < d + 1:
                    ret_dist = d + 1
                    ret_node = to
    return (ret_node, ret_dist)


n, d = farthest_node_and_dist(0)
n, d = farthest_node_and_dist(n)
print(("Second" if d % 3 == 1 else "First"))

import sys

input = sys.stdin.readline
sys.setrecursionlimit(10**8)
N = int(eval(input()))
AB = [tuple(map(int, input().split())) for i in range(N - 1)]
es = [[] for _ in range(N)]
for a, b in AB:
    a, b = a - 1, b - 1
    es[a].append(b)
    es[b].append(a)
depth = [0] * N


def dfs(v, p=-1):
    for to in es[v]:
        if to == p:
            continue
        depth[to] = depth[v] + 1
        dfs(to, v)


dfs(0)
mxd = max(depth)
i = depth.index(mxd)
depth = [0] * N
dfs(i)
diameter = max(depth)
print(("Second" if diameter % 3 == 1 else "First"))

+import sys + +input = sys.stdin.readline +sys.setrecursionlimit(10**8) -src = [tuple([int(x) - 1 for x in input().split()]) for i in range(N - 1)] -es = [[] for i in range(N)] -for a, b in src: +AB = [tuple(map(int, input().split())) for i in range(N - 1)] +es = [[] for _ in range(N)] +for a, b in AB: +    a, b = a - 1, b - 1 +depth = [0] * N -def farthest_node_and_dist(s): -    dist = [N] * N -    dist[s] = 0 -    stack = [s] -    ret_node = -1 -    ret_dist = 0 -    while stack: -        v = stack.pop() -        d = dist[v] -        for to in es[v]: -            if d + 1 < dist[to]: -                dist[to] = d + 1 -                stack.append(to) -                if ret_dist < d + 1: -                    ret_dist = d + 1 -                    ret_node = to -    return (ret_node, ret_dist) +def dfs(v, p=-1): +    for to in es[v]: +        if to == p: +            continue +        depth[to] = depth[v] + 1 +        dfs(to, v) -n, d = farthest_node_and_dist(0) -n, d = farthest_node_and_dist(n) -print(("Second" if d % 3 == 1 else "First")) +dfs(0) +mxd = max(depth) +i = depth.index(mxd) +depth = [0] * N +dfs(i) +diameter = max(depth) +print(("Second" if diameter % 3 == 1 else "First"))