#include "bits/stdc++.h"
using namespace std;

#define Rep(i,n) for(int i=0;i<n;i++)
#define For(i,n1,n2) for(int i=n1;i<n2;i++)
#define REP(i,n) for(ll i=0;i<n;i++)
#define RREP(i,n) for(ll i=n-1;i>=0;i--)
#define FOR(i,n1,n2) for(ll i=n1;i<n2;i++)
#define put(a) cout<<a<<"\n"
#define all(a)  (a).begin(),(a).end()
#define SORT(a) sort((a).begin(),(a).end())
#define oorret 0
#define oor(x) [&](){try{x;} catch(const out_of_range& oor){return oorret;} return x;}()

typedef long long ll;
typedef pair<int, int> P;
template<typename T1,typename T2> inline bool chmin(T1 &a,T2 b){if(a>b){a=b;return 1;}return 0;}
template<typename T1,typename T2> inline bool chmax(T1 &a,T2 b){if(a<b){a=b;return 1;}return 0;}

int n;
int s = 0;
int g = n-1;
int dfs(int mae){
    return 0;
}

int main(){
    cin >> n;
    vector<int> a(n-1);
    vector<int> b(n-1);
    vector<vector<int>> p(n);
    //vector<vector<int>> pf(n);
    //vector<vector<int>> pb(n);
    REP(i,n-1){
        cin >> a[i] >> b[i];
        a[i]--;
        b[i]--;
        p[b[i]].push_back(a[i]);
        p[a[i]].push_back(b[i]);
        
    }
    queue<int> q;
    vector<P> pf(n,P(-1,-1));
    q.push(0);
    pf[0] = P(0,0);
    while (!q.empty()) {
        int now = q.front();
        q.pop();
        REP(i,p[now].size()){
            if(pf[p[now][i]].first==-1){
                pf[p[now][i]] = P(pf[now].first+1,now);
                q.push(p[now][i]);
            }
        }
    }
    //queue<int> q;
    vector<P> pb(n,P(-1,-1));
    q.push(n-1);
    while (!q.empty()) {
        int now = q.front();
        q.pop();
        REP(i,p[now].size()){
            if(pb[p[now][i]].first==-1){
                pb[p[now][i]] = P(pb[now].first+1,now);
                q.push(p[now][i]);
            }
        }
    }
    //int mid = -1;
    if(pf[n-1].first%2==0){
        int d = (pf[n-1].first-1)/2;
        int v = n-1;
        REP(i,d){
            v = pf[v].second;
        }
        int cnt = -1;
        q.push(0);
        vector<bool> visited(n,false);
        
        while(!q.empty()){
            int now = q.front();
            q.pop();
            visited[now] = true;
            if(now!=v){
                cnt++;
                REP(i,p[now].size()){
                    if(!visited[p[now][i]]){
                        q.push(p[now][i]);
                    }
                }
            }
        }
        int pcnt = n-2-cnt;
        if(cnt>pcnt){
            put("Fennec");
        }else{
            put("Snuke");
        }
        return 0;
    }else{
        int d = (pf[n-1].first-1)/2;
        int v = n-1;
        REP(i,d){
            v = pf[v].second;
        }
        int cnt = -1;
        q.push(0);
        vector<bool> visited(n,false);
        
        while(!q.empty()){
            int now = q.front();
            q.pop();
            visited[now] = true;
            if(now!=v){
                cnt++;
                REP(i,p[now].size()){
                    if(!visited[p[now][i]]){
                        q.push(p[now][i]);
                    }
                }
            }
        }
        int pcnt = n-2-cnt;
        if(cnt>pcnt){
            put("Fennec");
        }else{
            put("Snuke");
        }
        return 0;
    }
    return 0;
}


Measured memory_bytes: 8064