// Original C++ solution (slower):
#include<bits/stdc++.h>

using namespace std;



#define int long long

#define pb push_back 

#define pf push_front 

#define mp make_pair

#define fr first

#define sc second

#define Rep(i,n) for(int i=0;i<(n);i++)

#define All(v) v.begin(),v.end()



typedef pair<int, int> Pii; typedef pair<int, Pii> Pip;

const int INF = 1107110711071107;



int a_d[100001];

int N;

vector<int> graph[100001];



void bfs1()

{

  queue<Pii> q;

  q.push(Pii(0, 0));



  while ( !q.empty() ) {

    Pii p = q.front(); q.pop();

    int n = p.fr, c = p.sc;

    

    if ( a_d[n] != INF ) continue;

    a_d[n] = c;



    Rep(i, graph[n].size()) {

      if ( graph[n][i] == N-1 ) continue;

      q.push(Pii(graph[n][i], c + 1));

    }

    

  }

  

}



bool bfs2()

{

  queue<Pii> q;

  bool used[100001] = {0};

  int cnt = 0;

  q.push(Pii(N-1, 0));



  while ( !q.empty() ) {

    Pii p = q.front(); q.pop();

    int n = p.fr, c = p.sc;



    if ( used[n] ) continue;

    used[n] = true;

    if ( c < a_d[n] ) cnt++;

    if ( cnt > (N - 2 + 1) / 2 ) return true;



    Rep(i, graph[n].size()) {

      if ( graph[n][i] == 0 ) continue;

      q.push(Pii(graph[n][i], c + 1));

    }

  }



  return false;

}



signed main()

{

  cin >> N;

  Rep(i, N-1) {

    int a, b;

    cin >> a >> b;

    a--; b--;

    graph[a].pb(b);

    graph[b].pb(a);

  }



  fill_n(a_d, 100001, INF);

  bfs1();

  //cout << 'a' << endl;

  if ( bfs2() ) cout << "Snuke" << endl;

  else cout << "Fennec" << endl;

  

}


// Optimized solution to the same problem (faster):
#include<bits/stdc++.h>

using namespace std;



#define int long long

using P = pair<int, int>;



vector<int> G[100001];

int N;



int pre[100001];

int col[100001];



int bfs() {

  vector<bool> used(N, false);

  queue<P> q;

  q.push(P(0, 0));

  while ( !q.empty() ) {

    P p = q.front(); q.pop();

    int v = p.first, c = p.second;



    if ( v == N-1 ) return c;    

    

    if ( used[v] ) continue;

    used[v] = true;



    for ( int u : G[v] ) {

      if ( used[u] ) continue;      

      pre[u] = v;

      q.push(P(u, c+1));      

    }

  }

}



void bfs2() {

  vector<bool> used(N, false);

  queue<P> q;

  q.push(P(0, 0));

  while ( !q.empty() ) {

    P p = q.front(); q.pop();

    int v = p.first, c = p.second;   

    

    if ( used[v] ) continue;

    used[v] = true;

    col[v] = 1;    



    for ( int u : G[v] ) {

      if ( used[u] ) continue;		       

      if ( col[u] == 2 ) continue;      

      q.push(P(u, c+1));      

    }

  }

}



signed main() {

  cin >> N;

  for ( int i = 0; i < N-1; i++ ) {

    int a, b;

    cin >> a >> b;

    a--; b--;

    G[a].emplace_back(b);

    G[b].emplace_back(a);

  }

  

  int c = bfs();

  int now = N-1;

  int cnt = 0;

  

  while ( 1 ) {

    

    if ( cnt < (c+1)/2 ) {

      col[now] = 2;

      // cout << now << endl;

    } else {      

      col[now] = 1;      

    }

    cnt++;    

    if ( now == 0 ) break;

    now = pre[now];    

  }

  

  bfs2();

  int bl = 0;

  for ( int i = 0; i < N; i++ ) {

    if ( col[i] == 1 ) bl++;    

  }



  if ( bl > (N-bl) ) puts("Fennec");

  else puts("Snuke");  

  

  return 0;  

}


// Fastest known solution for this problem: