#include <bits/stdc++.h>
using namespace std;
#define repr(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) for(int i=0;i<n;i++)
#define reprrev(i,a,b) for(int i=b-1;i>=a;i--) // [a, b)
#define reprev(i,n) reprrev(i,0,n)
typedef long long ll;
typedef unsigned long long ull;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }

/* attention
    long longのシフト演算には気をつけよう
    タイポした時のデバッグが死ぬほどきつくなるので変数名は最低3字くらい使った方がいいかも
    sizeは(int)とキャストしよう
    cin.tie(0);
    ios::sync_with_stdio(false);<- これら、printfとかと併用しない方が良さそう

*/

const ll mod = 1e9+7;

void chmod(ll &M){
    if(M >= mod) M %= mod;
    else if(M < 0){
        M += (abs(M)/mod + 1)*mod;
        M %= mod;
    }
}

ll modpow(ll x, ll n){
    if(n==0) return 1;
    ll res=modpow(x, n/2);

    if(n%2==0) return res*res%mod;
    else return res*res%mod*x%mod;
}

int getl(int i, int N) { return i==0? N-1:i-1; };
int getr(int i, int N) { return i==N-1? 0:i+1; };


// 線分 ab の偏角 返り値は[-π, π]
double argument(const pair<double, double> &a, const pair<double, double> &b){
    double ax=a.first, ay=a.second, bx=b.first, by=b.second;
    return atan2(by-ay, bx-ax);
}

/* <-----------------------------------------------------------------------------------> */
/* <-----------------------------------------------------------------------------------> */
/* <-----------------------------------------------------------------------------------> */
/* <-----------------------------------------------------------------------------------> */

struct Dijkstra{
private:
    const ll inf = 1LL<<60;
    int n;
    vector<vector<pair<ll, ll>>> adj;
    vector<ll> dist;

public:
    Dijkstra(int _n) :n(_n) {
        adj.resize(n);
        dist.resize(n, inf);
    }

    void add_edge(int from, int to, ll cost){ adj[from].push_back(make_pair(to, cost)); }

    void dijkstra(int s){
        priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
        pq.push(make_pair(0, s));
        dist[s] = 0;

        while(!pq.empty()){
            int now = pq.top().second;
            int d = pq.top().first;
            pq.pop();
            if(dist[now] < d) continue;
            for(auto edge : adj[now]){
                int to = edge.first;
                int w = edge.second;
                if(dist[to] > dist[now] + w){
                    dist[to] = dist[now] + w;
                    pq.push(make_pair(dist[to], to));
                }
            }
        }
    }

    ll const & getdist(int v) const { return dist[v]; }
};

int main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);

    int n; cin >> n;
    Dijkstra fen(n);
    Dijkstra snu(n);

    rep(i, n-1){
        int a, b; cin >> a >> b;
        --a; --b;
        fen.add_edge(a, b, 1);
        fen.add_edge(b, a, 1);
        snu.add_edge(a, b, 1);
        snu.add_edge(b, a, 1);
    }

    fen.dijkstra(0);
    snu.dijkstra(n-1);

    int fscore = 0, sscore = 0;
    rep(i, n){
        if(fen.getdist(i) <= snu.getdist(i)) ++fscore;
        else ++sscore;
    }
    
    cout << (fscore > sscore? "Fennec":"Snuke") << endl;
    
    return 0;
}

Measured memory_bytes: 16992