#include<stdio.h>
#define MAXN 100005
#define MAXM 200005
int N,A,B,Ans[MAXN];
bool mark[MAXN];

int tot,en[MAXM],nex[MAXM],las[MAXN];
void ADD(int x,int y)
{
    en[++tot]=y;
    nex[tot]=las[x];
    las[x]=tot;
}

int path[MAXN],Cnt[MAXN];
bool flag;
void Find_Path(int p,int f)
{
    if(flag)return;
    int i,y;
    if(p==N){flag=true;return;}
    for(i=las[p];i;i=nex[i])
    {
        y=en[i];
        if(y==f)continue;
        path[y]=p;
        Find_Path(y,p);
    }
}

void DFS1(int p,int f)
{
    int i,y;
    Cnt[p]=1;
    for(i=las[p];i;i=nex[i])
    {
        y=en[i];
        if(y==f||mark[y])continue;
        DFS1(y,p);
        Cnt[p]+=Cnt[y];
    }
}

void DFS2(int p,int f)
{
    int i,y;
    for(i=las[p];i;i=nex[i])
    {
        y=en[i];
        if(y==f||mark[y])continue;
        A++;
        DFS2(y,p);
    }
}
int main()
{
    int i,x,y,cnt=0;

    scanf("%d",&N);
    for(i=1;i<N;i++)scanf("%d%d",&x,&y),ADD(x,y),ADD(y,x);

    Find_Path(1,-1);//找出1到N路径上的点 
    for(i=N;i!=1;i=path[i])mark[path[i]]=true;//将1到N路径上的点做标记 
    mark[1]=mark[N]=true;
    for(i=N;path[i]!=1;i=path[i])DFS1(path[i],-1); 
    for(i=N;path[i]!=1;i=path[i])cnt++,Ans[cnt]=Ans[cnt-1]+Cnt[path[i]];
    //cnt记录1到N路径上点的个数（不含1，N），Cnt记录占领该点的总收益 
    DFS2(1,-1);
    B=A;A=0;
    DFS2(N,-1);
    //找B类和C类点的个数 
    if(B+Ans[cnt]-Ans[cnt/2]>A+Ans[cnt/2])printf("Fennec");
    else printf("Snuke");
}
