#include <bits/stdc++.h>
using namespace std;
const int inf = ~0u >> 1, MOD = 1e9 + 7;
inline int rd() {
  int x, c, f = 1;
  while (!isdigit(c = getchar())) f = c != '-';
  x = c - '0';
  while (isdigit(c = getchar())) x = x * 10 + c - '0';
  return f ? x : -x;
}
const int N = 1e5 + 11;
struct Edge {
  int v;
  Edge *nxt;
} pl[N << 1], *cur = pl, *G[N];
inline void ins(int u, int v) { *cur = (Edge){v, G[u]}, G[u] = cur++; }
int n, d[N], q[N];
void dfs(int x, int f = -1) {
  int sz = 0;
  for (Edge *i = G[x]; i; i = i->nxt)
    if (i->v != f) {
      sz += d[i->v] == 1;
      dfs(i->v, x);
    }
  if (sz > 1)
    puts("First"), exit(0);
  else if (sz == 1) {
    q[x] = 1;
  }
}
int main() {
  n = rd();
  if (n == 2) {
    puts("Second");
    return 0;
  }
  for (int i = (1), i_end = (n); i < i_end; ++i) {
    int u = rd(), v = rd();
    ins(u, v), ins(v, u);
    d[u]++, d[v]++;
  }
  for (int i = (1), i_end = (n); i <= i_end; ++i)
    if (d[i] != 1) {
      dfs(i);
      break;
    }
  for (int i = (1), i_end = (n); i <= i_end; ++i)
    if (d[i] == 2 && !q[i]) {
      int f = 1;
      for (Edge *j = G[i]; j; j = j->nxt) f &= q[j->v];
      if (f) puts("First"), exit(0);
    }
  puts("Second");
}
