// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;

const int TAM = 100003;



vector <int> adj[TAM];

int n, a, b, vis[TAM];

int pa [TAM], pb [TAM], sub[TAM], col[TAM];



int calc ( int x ){

    sub[x] = 1;

    for( int i = 0 ; i < adj[x].size() ; i ++ ){

        if( adj[x][i] == pa[x] ) continue;

        sub[x] += calc(adj[x][i]);

    }

    //cout << " calc :: " << x << " -> " << sub[x] << endl ;

    return sub[x];

}



int main(){



    scanf("%d",&n);

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

        scanf("%d%d",&a,&b);

        adj[a].push_back(b);

        adj[b].push_back(a);

    }

    queue <int> bfs;

    bfs.push(1);

    pa[1] = 1;

    vis[1] = 1;

    int act, nxt;

    while( bfs.size() ){

        act = bfs.front();

        bfs.pop();



        for( int i = 0 ; i < adj[act].size() ; i ++ ){

            nxt = adj[act][i];

            if( vis[nxt] != 1 ){

                vis[nxt] = 1;

                pa[nxt] = act;

                //cout << " pa :: " << nxt << " -> " << pa[nxt] << endl ;

                bfs.push(nxt);

            }

        }

    }

    calc(1);



    bfs.push(n);

    pb[n] = n;

    vis[n] = 2;

    while( bfs.size() ){

        act = bfs.front();

        bfs.pop();



        for( int i = 0 ; i < adj[act].size() ; i ++ ){

            nxt = adj[act][i];

            if( vis[nxt] != 2 ){

                vis[nxt] = 2;

                pb[nxt] = act;

                //cout << " pb :: " << nxt << " -> " << pb[nxt] << endl ;

                bfs.push(nxt);

            }

        }

    }



    col[1] = 1;

    col[n] = 2;

    int ta = 1, tb = 1, ca = 1, cb = n, ra, rb;

    while( true ){

        if( col[pb[ca]] == 0 ){

            ca = pb[ca];

            col[ca] = 1;

            ta ++;

        }else{

            ra = sub[1] - sub[cb] - ta;

            rb = sub[cb] - tb;

            if( ra > rb ) printf("Fennec\n");

            else printf("Snuke\n");

            return 0;

        }

        if( col[pa[cb]] == 0 ){

            cb = pa[cb];

            col[cb] = 2;

            tb ++;

        }else{

            ra = sub[1] - sub[cb] - ta;

            rb = sub[cb] - tb;

            if( ra >= rb ) printf("Fennec\n");

            else printf("Snuke\n");

            return 0;

        }

    }



    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 3.5738833244076367x):
#include<iostream>

#include<cstdio>

using namespace std;

int siz[101000],fa[101000];

int h[101000],nxt[201000],K=0,to[201000];

void ins(int u,int v){nxt[++K]=h[u];h[u]=K;to[K]=v;}

void dfs(int x,int f)

{

	fa[x]=f;siz[x]=1;

	for(int i=h[x];i;i=nxt[i])

	{

		if(to[i]==f)continue;

		dfs(to[i],x);siz[x]+=siz[to[i]];

	}

}

int main()

{

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

	for(int i=1;i<n;i++)

	{

		int a,b;scanf("%d%d",&a,&b);

		ins(a,b);ins(b,a);

	}

	dfs(1,0);int tot=0;

	for(int i=fa[n];i!=1;i=fa[i])tot++;

	int k=n;

	for(int i=1;i<=tot/2;i++)k=fa[k];

	int ls1=n-siz[k]-(tot-tot/2),ls2=siz[k]-tot/2;

	if(tot&1)

	{

		if(ls2<=ls1)puts("Fennec");

		else puts("Snuke");

	}

	else

	{

		if(ls1<=ls2)puts("Snuke");

		else puts("Fennec");

	}

	return 0;

}