#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
 
using namespace std;
using namespace __gnu_pbds;
 
#define cint(d) scanf("%d", &d)
#define cint2(a, b) scanf("%d %d", &a, &b)
#define cint3(a, b, c) scanf("%d %d %d", &a, &b, &c)
#define cint4(a, b, c, d) scanf("%d %d %d %d", &a, &b, &c, &d)
 
#define clong(d) scanf("%lld", &d)
#define clong2(a, b) scanf("%lld %lld", &a, &b)
#define clong3(a, b, c) scanf("%lld %lld %lld", &a, &b, &c)
#define clong4(a, b, c, d) scanf("%lld %lld %lld %lld", &a, &b, &c, &d)
 
#define foreach(v, c) for(__typeof( (c).begin()) v = (c).begin();  v != (c).end(); ++v)
#define revforeach(v, c) for(__typeof( (c).rbegin()) v = (c).rbegin();  v != (c).rend(); ++v)
#define ALL(v) (v).begin(), (v).end()
 
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second
 
typedef long long int slong;
typedef pair<int, int> pii;
typedef pair<slong, slong> pll;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
typedef set<int>::iterator sit;
typedef map<int,int>::iterator mit;
typedef vector<int>::iterator vit;
 
#ifdef VSP4 
    #include "debug.h"    
#else
    #define debug(args...)                  // Just strip off all debug tokens
#endif
 
const int MOD = 1e5 + 1;
#define MODSET(d) if ((d) >= MOD) d %= MOD;
#define MODNEGSET(d) if ((d) < 0) d = ((d % MOD) + MOD) % MOD;
#define MODADDSET(d) if ((d) >= MOD) d -= MOD;
#define MODADDWHILESET(d) while ((d) >= MOD) d -= MOD;
 
const int MAXN = 2e6;
const int SQRTN = 550;
const int LOGN = 60;
const int INT_INFINITY = 1001001001;
const int LIMIT = 1e5;
 
const slong LONG_INFINITY = 1001001001001001001ll;
const slong LONG_LIMIT = 800100100100101ll;
 
typedef complex<long double> base;
const long double PI = acos(-1);

int n;
vector<int> graph[MAXN+5];
vector<int> path;

int subtreesum[MAXN+5];

bool dfs(int u, int p)
{
	if (u == n)
	{
		path.pb(u);
		return true;
	}
	
	for (auto v: graph[u])
	{
		if (v != p)
		{
			if (dfs(v, u))
			{
				path.pb(u);
				return true;
			}
		}
	}
	
	return false;
}

void dfssum(int u, int p)
{
	subtreesum[u] = 1;
	
	for (auto v: graph[u])
	{
		if (v != p)
		{
			dfssum(v, u);
			subtreesum[u] += subtreesum[v];
		}
	}
}

int main()
{
	#ifdef VSP4
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	
	clock_t begin = clock();
	
	int t, i, j, x, y, u, v;
	
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cint(n);
	
	for (i = 1; i <= n-1; i++)
	{
		cint2(u, v);
		graph[u].pb(v);
		graph[v].pb(u);
	}
	
	dfs(1, -1);
	dfssum(1, -1);
	
	int len = (path.size() + 1)/2;
	
	i = 0;
	j = path.size() - 1;
	
	assert(path.size() >= 2);
	
	int lastwhite = -1;
	
	reverse(ALL(path));
	
	debug(path);
	
	for (i = 0; i < path.size(); i++)
	{
		debug(i, i&1);
		if (i & 1)
		{
			lastwhite = path[j];
			j--;
			//white
		}
		else
		{
			//black
		}
	}
	
	assert(lastwhite != -1);
	
	int whites = subtreesum[lastwhite];
	int blacks = n - whites;
	
	debug(blacks, whites, lastwhite);
	
	if (blacks > whites)
	{
		cout << "Fennec";
	}
	else
	{
		cout << "Snuke";
	}
	return 0;
}


Measured memory_bytes: 59128