#include <algorithm>
#include <bitset>
#include <cassert>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>

// c++11
#include <array>
#include <tuple>
#include <unordered_map>
#include <unordered_set>

#define mp make_pair
#define mt make_tuple
#define rep(i, n) for (int i = 0; i < (n); i++)

using namespace std;

using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;

const int INF = 1 << 29;
const double EPS = 1e-9;
const ll MOD = 1000000007;

const int dx[] = {1, 0, -1, 0}, dy[] = {0, -1, 0, 1};
const int MAX_N = 100100;
int N;
vector<int> edges[MAX_N];
int pre_node[MAX_N];
queue<int> bfs(int src){
  queue<pii> que;
  que.push(mp(src, src));
  memset(pre_node, -1, sizeof(pre_node));

  int goal = src == 0 ? N - 1 : 0;
  while (not que.empty()){
    auto pos = que.front();
    que.pop();
    int now = pos.first;
    int pre = pos.second;
    if (pre_node[now]!= -1){
      continue;
    }
    pre_node[now] = pre;
    if (now == goal){
      continue;
    }
    for (const auto&next : edges[now]){
      if (next == pre){
        continue;
      }
      if (pre_node[next] != -1)continue;
      que.push(mp(next, now));
    }
  }
  vector<int> paths;
  int pos = goal;
  while (pre_node[pos] != src){
    pos = pre_node[pos];
    paths.push_back(pos);
  }
  reverse(paths.begin(), paths.end());

  queue<int> result;
  for (int i = 0; i < paths.size(); i++){
    result.push(paths[i]);
  }
  return result;
}
const string FENNEC = "Fennec";
const string SNUKE = "Snuke";
int colors[MAX_N];
int main() {
  cin >> N;
  for (int i = 0; i < N - 1; i++){
    int a,b;
    cin >> a >> b;
    a--,b--;
    edges[a].push_back(b);
    edges[b].push_back(a);
  }
  queue<int> paths_from_src = bfs(0);
  queue<int> paths_from_goal = bfs(N - 1);
  memset(colors, -1, sizeof(colors));
  colors[0] = 1;//black
  colors[N-1] = 2;//white
  bool turn = true;
  queue<int> cand1,cand2;
  for (int i = 0; i < edges[0].size(); i++){
    cand1.push(edges[0][i]);
  }
  for (int i = 0; i < edges[N - 1].size(); i++){
    cand2.push(edges[N - 1][i]);
  }
  while (true){
    bool ok = false;
    if (turn){
      while (not paths_from_src.empty()){
        int pos = paths_from_src.front();
        paths_from_src.pop();
        if (colors[pos] == -1){//not color
          colors[pos] = 1;
          ok = true;
          for (const auto &next : edges[pos]){
            if (colors[next] == -1){
              cand1.push(next);
            }
          }
          break;
        }
      }
      if (not ok){
        while (not cand1.empty()){
          int pos = cand1.front();
          cand1.pop();
          if (colors[pos] == -1){//not color
            colors[pos] = 1;
            ok = true;
            for (const auto &next : edges[pos]){
              if (colors[next] == -1){
                cand1.push(next);
              }
            }
            break;
          }
        }
      }
    }else{
      while (not paths_from_goal.empty()){
        int pos = paths_from_goal.front();
        paths_from_goal.pop();
        if (colors[pos] == -1){//not color
          colors[pos] = 2;
          ok = true;
          for (const auto &next : edges[pos]){
            if (colors[next] == -1){
              cand2.push(next);
            }
          }
          break;
        }
      }
      if (not ok){
        while (not cand2.empty()){
          int pos = cand2.front();
          cand2.pop();
          if (colors[pos] == -1){//not color
            colors[pos] = 2;
            ok = true;
            for (const auto &next : edges[pos]){
              if (colors[next] == -1){
                cand2.push(next);
              }
            }
            break;
          }
        }
      }
    }

    //game set
    if (not ok){
      if (turn){
        cout << SNUKE << endl;
      }else{
        cout << FENNEC << endl;
      }
      return 0;
    }
    turn = !turn;
  }
  return 0;
}


Measured memory_bytes: 7792