Problem:
 Score : 900 points    Problem Statement There is a tree with N vertices numbered 1 through N .
The i -th of the N-1 edges connects vertices a_i and b_i .  Initially, each vertex is uncolored.  Takahashi and Aoki is playing a game by painting the vertices. In this game, they alternately perform the following operation, starting from Takahashi:   Select a vertex that is not painted yet.  If it is Takahashi who is performing this operation, paint the vertex white; paint it black if it is Aoki.   Then, after all the vertices are colored, the following procedure takes place:   Repaint every white vertex that is adjacent to a black vertex, in black.   Note that all such white vertices are repainted simultaneously, not one at a time.  If there are still one or more white vertices remaining, Takahashi wins; if all the vertices are now black, Aoki wins.
Determine the winner of the game, assuming that both persons play optimally.      Constraints  2 ≤ N ≤ 10^5  1 ≤ a_i,b_i ≤ N  a_i ≠ b_i  The input graph is a tree.         Input Input is given from Standard Input in the following format:  N  a_1  b_1 : a_{N-1}  b_{N-1}       Output Print First if Takahashi wins; print Second if Aoki wins.        Sample Input 1 3
1 2
2 3      Sample Output 1 First  Below is a possible progress of the game:   First, Takahashi paint vertex 2 white.  Then, Aoki paint vertex 1 black.  Lastly, Takahashi paint vertex 3 white.   In this case, the colors of vertices 1 , 2 and 3 after the final procedure are black, black and white, resulting in Takahashi's victory.       Sample Input 2 4
1 2
2 3
2 4      Sample Output 2 First       Sample Input 3 6
1 2
2 3
3 4
2 5
5 6      Sample Output 3 Second

Solution (Python):
n = int(input())
tree = [[] for i in range(n)]
degree = [0 for i in range(n)]

for i in range(n-1):
    a, b = map(int, input().split())
    a -= 1
    b -= 1
    tree[a].append(b)
    tree[b].append(a)
    degree[a] += 1
    degree[b] += 1

leaf = []
for i in range(n):
    if degree[i] == 1:
        leaf.append(i)

color = ['' for i in range(n)]

first = False
while leaf:
    v = leaf.pop()
    if degree[v] == 0:
        first = True
        continue
    degree[v] = 0
    p = tree[v][0]
    
    
    color[v] = 'B'
    color[p] = 'W'
    for np in tree[p]:
        tree[np].remove(p)
        degree[np] -= 1
        if degree[np] == 0:
            first = True
        elif degree[np] == 1:
            leaf.append(np)

for i in range(n):
    if color[i] == '' and degree[i] == 0:
        first = True

print('First' if first else 'Second')