// 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.5833349890833874x):
#include <algorithm>

#include <bitset>

#include <cmath>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <deque>

#include <list>

#include <map>

#include <iomanip>

#include <iostream>

#include <queue>

#include <set>

#include <stack>

#include <string>

#include <utility>

#include <vector>

#define fi first

#define se second

#define pb push_back

//#define mp make_pair

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

using namespace std;

typedef long long LL;

typedef pair<int,int> pii;

const int INF=0x3f3f3f3f;

const int dx[]={0,1,-1,0},dy[]={1,0,0,-1};

//const int MOD=998244353;

const int N=2e5+10;



inline int read(){

	int ww=1,xx=0;char ch=getchar();

	while(!isdigit(ch)){if(ch=='-') ww=-ww;ch=getchar();}

	while(isdigit(ch)){xx=(xx<<1)+(xx<<3)+(ch^48);ch=getchar();}

	return ww*xx;

}



int n=read();

int head[N];

int cnt;

int dist1[N],dist2[N],ans;



struct Edge{

	int to,nxt;

}ed[N];



void add_edge(int a,int b){

	ed[++cnt].to=b;

	ed[cnt].nxt=head[a];

	head[a]=cnt;

}



void dfs1(int u,int p){

	for(int i=head[u];i!=-1;i=ed[i].nxt){

		int v=ed[i].to;

		if(v!=p){

			dist1[v]=dist1[u]+1;

			dfs1(v,u);

		}

	}

}



void dfs2(int u,int p){

	for(int i=head[u];i!=-1;i=ed[i].nxt){

		int v=ed[i].to;

		if(v!=p){

			dist2[v]=dist2[u]+1;

			dfs2(v,u);

		}

	}

}



signed main(){

//	freopen(".in","r",stdin);

//	freopen(".out","w",stdout);

	for(int i=1;i<=n;i++) head[i]=-1;

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

		int fr,to;

		fr=read();

		to=read();

		add_edge(fr,to);

		add_edge(to,fr);

	}

	dist1[1]=0;

	dist2[n]=0;

	dfs1(1,-1);

	dfs2(n,-1);

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

		if(dist1[i]<=dist2[i])

			ans++;

	if(ans>n-ans) puts("Fennec");

	else puts("Snuke");

	return 0;

}

/*

7

3 6

1 2

3 1

7 4

5 7

1 4



4

1 4

4 2

2 3

*/