#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string>
#include<vector>
#include<map>
#include<math.h>
#include<algorithm>
#include<iomanip>
#include<set>

#define P 1000000007

using namespace std;

class Counting {
	unsigned long long p, n;
	vector<long long> invMemo, facMemo, facInvMemo;
public:
	Counting(unsigned long long nn, unsigned long long np) {
		p = np;
		n = nn;
		invMemo.resize(n + 1);
		facMemo.resize(n + 1);
		facInvMemo.resize(n + 1);
		facMemo[0] = 1;
		facMemo[1] = 1;
		facInvMemo[0] = 1;
		facInvMemo[1] = 1;
		invMemo[0] = 0;
		invMemo[1] = 1;
		for (unsigned long long i = 2; i <= n; i++) {
			invMemo[i] = p - (p / i)*invMemo[p%i] % p;
			facMemo[i] = (facMemo[i - 1] * i) % p;
			facInvMemo[i] = (facInvMemo[i - 1] * invMemo[i]) % p;
		}
	}
	unsigned long long fac(unsigned long long k) {
		return facMemo[k];
	}
	unsigned long long facInv(unsigned long long k) {
		return facInvMemo[k];
	}
	unsigned long long choose(unsigned long long n, unsigned long long k) {
		if (!(0 <= k && k <= n))
			return 0;
		return (((facMemo[n] * facInvMemo[k]) % p)*facMemo[n - k]) % p;
	}
	unsigned long long divide(unsigned long long a, unsigned long long b) {
		return (a * invMemo[b]) % p;
	}
	unsigned long long mod(unsigned long long a) {
		a %= p;
		if (a < 0) a += p;
		return a;
	}
	unsigned long long power(unsigned long long a, unsigned long long e) {
		unsigned long long ans = 1;
		for (; e > 0; e /= 2) {
			if (e % 2 != 0)
				ans = ans * a % p;
			a = a*a%p;
		}
		return ans;
	}
};


int n;
vector<vector<int>> p;
vector<int> back, cost;
vector<int> path;
set<int> c;

void dfs(int prev, int now) {
	back[now] = prev;
	if (now == n - 1) {
		return;
	}
	for (int i = 0; i < p[now].size(); i++) {
		if (back[p[now][i]] == -1) {
			dfs(now, p[now][i]);
		}
	}
}

int costsum(int now) {
	if (cost[now] == 0) {
		return 0;
	}
	if (cost[now] == -1) {
		cost[now] = 0;
		int sum = 0;
		for (int i = 0; i < p[now].size(); i++) {
			if (c.find(p[now][i]) == c.end()) {
				sum += costsum(p[now][i]);
			}
		}
		return cost[now] = sum + 1;
	}
	else {
		return cost[now];
	}
}

int main() {
	cin >> n;
	back.resize(n);
	cost.resize(n);
	for (int i = 0; i < n; i++) {
		back[i] = -1;
	}
	p.resize(n);

	for (int i = 0; i < n - 1; i++) {
		int t, f;
		cin >> t >> f;
		p[f - 1].push_back(t - 1);
		p[t - 1].push_back(f- 1);
		cost[f - 1]++;
		cost[t - 1]++;
	}

	for (int i = 0; i < p[0].size(); i++) {
		dfs(0, p[0][i]);
	}

	int now = n - 1;
	path.push_back(n - 1);
	c.insert(n - 1);
	while (now != 0) {
		now = back[now];
		path.push_back(now);
		c.insert(now);
	}

	for (int i = 0; i < n; i++) {
		if (cost[i] != 1) {
			cost[i] = -1;
		}
	}
	for (int i = 0; i < path.size(); i++) {
		cost[path[i]] = costsum(path[i]);
	}

	int bcnt = cost[0], fcnt = cost[n - 1];

	int g = path.size()%2;
	if (g == 1) {
		bcnt += cost[path[path.size() / 2]];
	}
	for (int i = 1; i < path.size() / 2;i++) {
		fcnt += cost[path[i]];
		bcnt += cost[path[path.size() - 1 - i]];
	}
	//cout << path.size() << " " << bcnt << " " << fcnt << endl;
	for (int i = 0; i < n; i++) {
		//cout << cost[i] << endl;
	}
		cout << (((bcnt - fcnt) > 0) ? "Fennec" : "Snuke") << endl;
	//	cout << (((bcnt - fcnt) >= 0) ? "Fennec" : "Snuke") << endl;
//	cin >> n;
	return 0;
}


Measured memory_bytes: 14712