#include <bits/stdc++.h>
#include <ext/rope>
using namespace std;
using namespace __gnu_cxx;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int ui;
typedef long double ld;
typedef pair<int, int> ii;
typedef pair<ii, ii> iii;
int MOD = 1e9 + 9;
const ld E = 1e-7;
#define null NULL
#define ms(x) memset(x, 0, sizeof(x))
#ifndef LOCAL
#define endl "\n"
#endif
#ifndef LONG_LONG_MAX
#define LONG_LONG_MAX LLONG_MAX
#endif
#define sync ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define _read(x) freopen(x, "r", stdin)
#define _write(x) freopen(x, "w", stdout)
#define files(x) _read(x ".in"); _write(x ".out")
#define filesdatsol(x) _read(x ".DAT"); _write(x ".SOL")
#define output _write("output.txt")
#define input _read("input.txt")
#define prev time_prev
#ifndef M_PI
#define M_PI acos(-1)
#endif
#define remove tipa_remove
#define next tipa_next
#define left tipa_left
#define right tipa_right
#define mod % MOD
#define y1 hello_world
unsigned char ccc;
bool _minus = false;
template<typename T>
inline T sqr(T t) {
	return (t * t);
}
inline void read(ll &n) {
	n = 0;
	_minus = false;
	while (true) {
		ccc = getchar();
		if (ccc == ' ' || ccc == '\n')
			break;
		if (ccc == '-') {
			_minus = true;
			continue;
		}
		n = n * 10 + ccc - '0';
	}
	if (_minus)
		n *= -1;
}
inline bool read(int &n) {
	n = 0;
	_minus = false;
	while (true) {
		ccc = getchar();
		if (ccc == ' ' || ccc == '\n') {
			if (ccc == '\n')
				return true;
			break;
		}
		if (ccc == '-') {
			_minus = true;
			continue;
		}
		n = n * 10 + ccc - '0';
	}
	if (_minus)
		n *= -1;
	return false;
}
char wwww[19];
int kkkk;
inline void write(ll y) {
	long long x = y;
	kkkk = 0;
	if (x < 0) {
		putchar('-');
		x *= -1;
	}
	if (!x)
		++kkkk, wwww[kkkk] = '0';
	else
		while (x) {
			++kkkk;
			wwww[kkkk] = char(x % 10 + '0');
			x /= 10;
		}
	for (int i = kkkk; i >= 1; --i)
		putchar(wwww[i]);
}
#ifdef LOCAL
//#define DEBUG
#endif
#ifdef DEBUG
#define dbg if(1)
#else
#define dbg if(0)
#endif

int n;

const int MAX = 1e5 + 10;
const int INF = 1e9;

vector<int> vec[MAX];

void culc(int pos, int *dist) {
	for (int i = 1; i <= n; i++) {
		dist[i] = INF;
	}
	dist[pos] = 0;
	queue<int> q;
	q.push(pos);
	while (!q.empty()) {
		pos = q.front();
		q.pop();
		for (int a : vec[pos]) {
			if (dist[a] == INF) {
				dist[a] = dist[pos] + 1;
				q.push(a);
			}
		}
	}
}

int dist1[MAX], dist2[MAX];

int color[MAX];

bool used[MAX];

int main() {
	sync;
	srand(time(NULL));
	cout.precision(10);
	cout << fixed;
#ifdef LOCAL
	input;
#else

#endif

	cin >> n;

	for(int i = 1; i < n; i++) {
		int a, b;
		cin >> a >> b;
		vec[a].push_back(b);
		vec[b].push_back(a);
	}

	culc(1, dist1);
	culc(n, dist2);

	int dist = dist1[n];

	for(int i = 1; i <= n; i++) {
		if(dist1[i] + dist2[i] == dist) {
			color[i] = (dist1[i] <= dist2[i] ? 1 : 2);
		}
	}

	used[1] = true;
	queue<int> q;
	q.push(1);
	while(!q.empty()) {
		int pos = q.front();
		q.pop();
		for(int a : vec[pos]) {
			if(!used[a]) {
				used[a] = true;
				if(!color[a]){
					color[a] = color[pos];
				}
				q.push(a);
			}
		}
	}

	int has = 0;

	for(int i = 1; i <= n; i++){
		if(color[i] == 1){
			has++;
		}else{
			has--;
		}
	}

	cout << (has > 0 ? "Fennec" : "Snuke") << endl;

}


Measured memory_bytes: 7168