output_description: If Fennec wins, print `Fennec`; if Snuke wins, print `Snuke`.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      a_1 b_1
      :
      a_{N-1} b_{N-1}
attempt:     #相手のパスを潰したい
      # こちら側に来てほしくない場合,最短経路を潰すしか無い
      # 最適を簡単に表せない A - B - C - D
      #                EF-|   |-GH...
      # のとき、A→EFとやっていると、Bを取られて死ぬ
      # でもこれをいちいち計算できない
      # 「相手のパスを潰す」、というのは、最短経路がより短いほうが勝つと考える?
      # でも相手にパスが潰されるかどうかはわからない
      # とりあえずやってみる
      n = int(input())
      INF = 10**6
      graph = [[float("inf")]*n for i in range(n)]
      for i in range(n - 1):
          a, b = map(int, input().split())
          graph[a - 1][b -1] = 1
          graph[b - 1][a - 1] = 1
       
      #ダイクストラで0, n-1からの最短距離を求める
       
       
      import heapq
       
      class Dijkstra(object):
          def dijkstra(self, adj, start, goal=None):
              '''
              ダイクストラアルゴリズムによる最短経路を求めるメソッド
              入力
              adj: adj[i][j]の値が頂点iから頂点jまでの距離(頂点iから頂点jに枝がない場合，値はfloat('inf'))となるような2次元リスト(正方行列)
              start: 始点のID
              goal: オプション引数．終点のID
              出力
              goalを引数に持つ場合，startからgoalまでの最短経路を格納したリストを返す
              持たない場合は，startから各頂点までの最短距離を格納したリストを返す
              >>> d = Dijkstra()
              >>> d.dijkstra([[float('inf'), 2, 4, float('inf'), float('inf')], [2, float('inf'), 3, 5, float('inf')], [4, 3, float('inf'), 1, 4], [float('inf'), 5, 1, float('inf'), 3], [float('inf'), float('inf'), 4, 3, float('inf')]], 0)
              [0, 2, 4, 5, 8] # 例えば，始点0から頂点3までの最短距離は5となる
              >>> d.dijkstra([[float('inf'), 2, 4, float('inf'), float('inf')], [2, float('inf'), 3, 5, float('inf')], [4, 3, float('inf'), 1, 4], [float('inf'), 5, 1, float('inf'), 3], [float('inf'), float('inf'), 4, 3, float('inf')]], 0, goal=4)
              [0, 2, 4] # 頂点0から頂点4までの最短経路は0 -> 2 -> 4となる
              '''
              num = len(adj)          # グラフのノード数
              dist = [float('inf') for i in range(num)] # 始点から各頂点までの最短距離を格納する
              prev = [float('inf') for i in range(num)] # 最短経路における，その頂点の前の頂点のIDを格納する
              
              dist[start] = 0
              q = []                  # プライオリティキュー．各要素は，(startからある頂点vまでの仮の距離, 頂点vのID)からなるタプル
              heapq.heappush(q, (0, start)) # 始点をpush
       
              while len(q) != 0:
                  prov_cost, src = heapq.heappop(q) # pop
                  
                  # プライオリティキューに格納されている最短距離が，現在計算できている最短距離より大きければ，distの更新をする必要はない
                  if dist[src] < prov_cost:
                      continue
       
                  # 他の頂点の探索
                  for dest in range(num):
                      cost = adj[src][dest]
                      if cost != float('inf') and dist[dest] > dist[src] + cost:
                          dist[dest] = dist[src] + cost # distの更新
                          heapq.heappush(q, (dist[dest], dest)) # キューに新たな仮の距離の情報をpush
                          prev[dest] = src                      # 前の頂点を記録
                          
              if goal is not None:
                  return self.get_path(goal, prev)
              else:
                  return dist
       
          def get_path(self, goal, prev):
              '''
              始点startから終点goalまでの最短経路を求める
              '''
              path = [goal]           # 最短経路
              dest = goal
       
              # 終点から最短経路を逆順に辿る
              while prev[dest] != float('inf'):
                  path.append(prev[dest])
                  dest = prev[dest]
       
              # 経路をreverseして出力
              return list(reversed(path))
      d = Dijkstra()
      #print(d.dijkstra(graph, start=0))
      #print(d.dijkstra(graph, start=n-1))
      cnt = 0
      for i, j in zip(d.dijkstra(graph, start=0,), d.dijkstra(graph, start=n-1)):
          if i <= j:
              cnt += 1
      print("Fennec" if cnt > n//2 else "Snuke")
      
problem_description: Statement
  
  Fennec and Snuke are playing a board game.
  
  On the board, there are N cells numbered 1 through N, and N-1 roads, each
  connecting two cells. Cell a_i is adjacent to Cell b_i through the i-th road.
  Every cell can be reached from every other cell by repeatedly traveling to an
  adjacent cell. In terms of graph theory, the graph formed by the cells and the
  roads is a tree.
  
  Initially, Cell 1 is painted black, and Cell N is painted white. The other
  cells are not yet colored. Fennec (who goes first) and Snuke (who goes second)
  alternately paint an uncolored cell. More specifically, each player performs
  the following action in her/his turn:
  
    * Fennec: selects an uncolored cell that is adjacent to a **black** cell, and paints it **black**.
    * Snuke: selects an uncolored cell that is adjacent to a **white** cell, and paints it **white**.
  
  A player loses when she/he cannot paint a cell. Determine the winner of the
  game when Fennec and Snuke play optimally.
samples: [{"input": "7\n    3 6\n    1 2\n    3 1\n    7 4\n    5 7\n    1 4", "output": "Fennec\n    \n\nFor example, if Fennec first paints Cell 2 black, she will win regardless of\nSnuke's moves.\n\n* * *"}, {"input": "4\n    1 4\n    4 2\n    2 3", "output": "Snuke"}]