import std.stdio, std.array, std.string, std.conv, std.algorithm;
import std.typecons, std.range, std.random, std.math, std.container;
import std.numeric, std.bigint, core.bitop;
 
void main() {
    auto N = readln.chomp.to!int;
    auto G = new int[][](N);
    foreach (_; 0..N-1) {
        auto s = readln.split.map!(to!int);
        G[s[0]-1] ~= s[1]-1;
        G[s[1]-1] ~= s[0]-1;
    }

    if (N == 1) {
        writeln("First");
        return;
    } else if (N == 2) {
        writeln("Second");
        return;
    }

    Tuple!(int, int) dfs(int n, int p) {
        auto ret = tuple(0, n);
        foreach (m; G[n]) {
            if (m == p) continue;
            auto t = dfs(m, n);
            t[0] += 1;
            ret = max(ret, t);
        }
        return ret;
    }

    auto d = dfs(dfs(0, -1)[1], -1)[0];
    int g = (d - 1) % 3;
    writeln(g > 0 ? "First" : "Second");
}
