#include <bits/stdc++.h>

// limit
#define mod1 22439423LL
#define mod2 42342432LL
#define mod3 56454765LL
#define mod4 66867574LL
#define oo 1000000007LL
#define OO 1000000000000000007LL
#define maxN 1000007

// loop
#define fto(i, x, y) for(int i = (x); i <= (y); ++i)
#define fdto(i, x, y) for(int i = (x); i >= (y); --i)
#define ftoa(i, x, y, a) for(int i = (x); i <= (y); i += a)
#define fdtoa(i, x, y, a) for(int i = (x); i >= (y); i -= a)
#define ftosqrt(i, x, y) for(int i = (x); i*i <= (y); ++i)
#define ftoit(it, var) for (__typeof(var.begin()) it = var.begin(); it != var.end(); ++it)
#define fdtoit(rit, var) for (__typeof(var.rbegin()) rit = var.rbegin(); rit != var.rend(); ++rit)

// debug
#define debug cout << "*" << endl;
#define bug1d(a, x, y) { cout << #a << ": "; fto(_, x, y) cout << a[_] << ' '; cout << endl; }
#define bug2d(a, x, y, u, v) { cout << #a << ": " << endl; fto(i, x, y) {fto(j, u, v) cout << a[i][j] << ' '; cout << endl;}; cout << endl;}
#define bug(a) cout << #a << " = " << a << endl;
#define bug2(a, b) cout << #a << " = " << a << "; "; cout << #b << " = " << b << endl;
#define bug3(a, b, c) cout << #a << " = " << a << "; "; cout << #b << " = " << b << "; "; cout << #c << " = " << c << endl;

// operation
#define mp make_pair
#define pb push_back
#define pf push_front
// structure
#define ii pair<int, int>
#define iii pair<ii, int>
#define vi vector<int>
#define vll vector<ll>
#define vii vector<ii>
#define matrix vector<vi>

// get value
#define FF first
#define SS second

// data type
#define ll long long
#define ull unsigned long long

// function
#define lb lower_bound
#define ub upper_bound

// const value
#define pi 3.14159265358979323846264338327950288419716939937510

using namespace std;

template <class T>
T min(T a, T b, T c) {
    return min(a, min(b, c));
}

template <class T>
T min(T a, T b, T c, T d) {
    return min(a, min(b, min(c, d)));
}

template <class T>
T max(T a, T b, T c) {
    return max(a, max(b, c));
}

template <class T>
T max(T a, T b, T c, T d) {
    return max(a, max(b, max(c, d)));
}

bool cmp(const ii& a, const ii& b) {return (a.FF > b.FF || (a.FF == b.FF && a.SS >= b.SS));}
ll GCD(ll a, ll b) {return (a%b) ? GCD(b, a%b) : b;}

const string namePro = "tmp";

int impossible[maxN];
bool visited[maxN];

vi adj[maxN];
int trace[maxN];

int color[maxN];
int couldColor[maxN];

void BFS() {
    queue <int> q;
    q.push(1);

    visited[1] = 1;
    trace[1] = 0;

    while (q.size()) {
        int u = q.front();
        q.pop();

        fto (i, 0, (int)adj[u].size()-1) {
            int v = adj[u][i];
            if (!visited[v]) {
                visited[v] = 1;
                q.push(v);
                trace[v] = u;
            }
        }
    }
}

void __BFS(int x, int k) {
    queue <int> q;
    q.push(x);
    color[x] = k;

    while (q.size()) {
        int u = q.front();
        q.pop();

        fto (i, 0, (int)adj[u].size()-1) {
            int v = adj[u][i];
            if (impossible[v]) continue;
            if (!color[v]) {
                color[v] = k;
                q.push(v);
            }
        }
    }

}

int main() {

    int n;
    scanf("%d", &n);

    fto (i, 1, n-1) {
        int u, v;
        scanf("%d%d", &u, &v);
        adj[u].pb(v);
        adj[v].pb(u);
    }

    BFS();
    int t = n;

    vi vc;

    while (t) {
        vc.pb(t);
        impossible[t] = 1;
        t = trace[t];
    }

    reverse(vc.begin(), vc.end());
    fto (i, 0, (int)vc.size()-1) {
        if (i+1 <= (int)vc.size()/2+(int)vc.size()%2) couldColor[vc[i]] = 1;
        else couldColor[vc[i]] = 2;
    }


    fto (i, 1, n) 
        if (couldColor[i]) __BFS(i, couldColor[i]);

        
    int cnt1 = 0;
    int cnt2 = 0;

    fto (i, 1, n) {
        if (color[i]) {
            if (color[i] == 1) ++cnt1;
            else ++cnt2;
        }
    }

    //fto (i, 1, n) cout << color[i] << " ";puts("");
    if (cnt1 > cnt2) puts("Fennec");
    else puts("Snuke");

    return 0;
}

Measured memory_bytes: 39160