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

using namespace std;

const int N=100005;

int n,a,b,dep,p,q;

int vis[N],path[N];

vector<int>e[N];

int dfs1(int now,int deep)

{

	vis[now]=1;

	if(now==n)

	{

		dep=deep;

		return 1;

	}

	for(int i=0;i<e[now].size();i++)

	{

		if(vis[e[now][i]])

			continue;

		path[deep]=e[now][i];

		if(dfs1(e[now][i],deep+1))

			return 1;

	}

	return 0;

}

int dfs2(int now)

{

	vis[now]=1;

	int sum=1;

	for(int i=0;i<e[now].size();i++)

		if(!vis[e[now][i]])

			sum+=dfs2(e[now][i]);

	return sum;

}

int main()



{

	scanf("%d",&n);

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

	{

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

		e[a].push_back(b);

		e[b].push_back(a);

	}

	path[0]=1;

	dfs1(1,1);

	//1:(0)---(dep/2),(dep/2+1)---(dep-1)  2:(0)---(dep/2-1),(dep/2)---(dep-1)

 	memset(vis,0,sizeof(vis));

 	p=dfs2(1);

	if(dep%2)

	{

		memset(vis,0,sizeof(vis));

		for(int i=0;i<=dep/2;i++)

			vis[path[i]]=1;

		q=dfs2(path[dep/2+1]);

		if(p-q>q)

			printf("Fennec\n");

		else

			printf("Snuke\n");

	}

	else

	{

		memset(vis,0,sizeof(vis));

		for(int i=0;i<=dep/2-1;i++)

			vis[path[i]]=1;

		q=dfs2(path[dep/2]);

		if(p-q>q)

			printf("Fennec\n");

		else

			printf("Snuke\n");

	}

	return 0;

}


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

#include<algorithm>

#include<string>

#include<functional>

#include<utility>

#include<ctime>

#include<cmath>

#include<vector>

#include<set>

#include<queue>

#include<deque>

#include<map>

#include<cstring>

#include<stack>

#include<cctype>

#include<cstdio>

#include<bitset>

#ifdef LOCAL

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

	#define tri(x) x*(x+1)/2;

	#define sqrsum(x) x*(x+1)*(2*x+1)/6;

	#define sqrsum_range(a,b) sqrsum(b)-sqrsum(a-1);

#endif

#define FOR(i,a,b) for(int i=a,_b=b;i<_b;i++)

#define REP(i,a,b) FOR(i,a,b+1)

#define ll_max 9223372036854775807LL

#define ll_min -9223372036854775808LL

#define int_max 2147483647

#define int_min -2147483648

#define PI 3.141592653589793238462653383

#define eps 0.00000001

#define elif else if

using namespace std;

void fast()

{

	cin.tie(NULL);

	cout.tie(NULL);

	ios_base::sync_with_stdio(false);

	return ;

}

bool isprime(int x)

{

	if(x<2)

		return false;

	for(int i=2;i<=sqrt(x);i++)

		if(x%i==0)

			return false;

	return true;

}

int GCD(int a,int b)

{

	return (b?GCD(b,a%b):a);

}

struct Tm

{

	int h,m,s;

	bool add()

	{

		s++;

		if(s==60)

			m++,

			s=0;

		if(m==60)

			h++,

			m=0;

		return (h<100);

	}

	void print()

	{

		printf("%02d:%02d:%02d",h,m,s);

		return ;

	}

	void println()

	{

		print();

		puts("");

	}

};

vector<int> G[100100];

int dist[100100][2];

void dfs(int now,int pre,int x)

{

	for(int i=0;i<G[now].size();i++)

		if(G[now][i]!=pre)

		{

			dist[G[now][i]][x]=dist[now][x]+1;

			dfs(G[now][i],now,x);

		}

	return ;

}

int main()

{

	int N;

	cin>>N;

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

	{

		int a,b;

		cin>>a>>b;

		G[a].push_back(b);

		G[b].push_back(a);

	}

	dfs(1,0,0);

	dfs(N,0,1);

	int cnt1=0,cnt2=0;

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

		if(dist[i][0]<=dist[i][1])

			cnt1++;

		else	cnt2++;

	if(cnt2>=cnt1)

		puts("Snuke");

	else	puts("Fennec");

	return 0;

}