// Original C++ solution (slower):
#include <iostream>

#include<vector>

#include<algorithm>

#include<string>

#include<map>

#include<set>

#include<stack>

#include<queue>

#include<math.h>

using namespace std;

typedef long long ll;

#define int long long

typedef vector<int> VI;

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

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

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

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

#define SORT(c) sort((c).begin(),(c).end())

#define rSORT(c) sort((c).rbegin(),(c).rend())

#define LB(x,a) lower_bound((x).begin(),(x).end(),(a))

#define UB(x,a) upper_bound((x).begin(),(x).end(),(a))

#define INF 1000000000

#define LLINF 9223372036854775807

#define mod 1000000007

//vector<vector<int> > dp;

//vector<vector<vector<int> > > vvvi;

//dp=vector<vector<int> >(N, vector<int>(M,0));

//vector<pair<int,int> > v;

//v.push_back(make_pair(x,y));

//do {

//    print(v);

//  } while (std::next_permutation(v.begin(), v.end()));



vector<VI> tree(100010);

int N;

int dis[100010] = { 0 };

int memo[100010] = { 0 };

bool ch[100010] = { 0 };







signed main() {

	cin.tie(0);

	ios::sync_with_stdio(false);

	cin >> N;

	eFOR(i,1, N)dis[i] = INF;

	dis[1] = 0;

	REP(i, N - 1) {

		int a, b;

		cin >> a >> b;

		tree[a].push_back(b);

		tree[b].push_back(a);

	}

	queue<int> q, qfs[2];

	int cnt[2] = { 0 };

	q.push(1);

	while (!q.empty()) {

		int now = q.front();

		q.pop();

		REP(i, tree[now].size()) {

			int next = tree[now][i];

			if (dis[now] + 1 < dis[next]) {

				q.push(next);

				memo[next] = now;

				dis[next] = dis[now] + 1;

			}

		}

	}

	int half = (dis[N] - 1) / 2, from = N, to = memo[N];

	REP(i, half) {

		from = to;

		to = memo[from];

	}

	if (from > to)swap(from, to);

	qfs[0].push(1);

	qfs[1].push(N);

	ch[1] = 1;

	ch[N] = 1;

	REP(i, 2) {

		while (!qfs[i].empty()) {

			int now = qfs[i].front();

			qfs[i].pop();

			REP(j, tree[now].size()) {

				int next = tree[now][j];

				if (min(now, next) == from && max(now, next) == to) continue;

				if (!ch[next]) {

					ch[next] = 1;

					qfs[i].push(next);

					cnt[i]++;

				}

			}

		}



	}



	if (cnt[0] > cnt[1])

		cout << "Fennec" << endl;

	else

		cout << "Snuke" << endl;

	return 0;

}




// Optimized solution to the same problem (faster):
#include <iostream>

#include<vector>

#include<algorithm>

#include<string>

#include<map>

#include<set>

#include<stack>

#include<queue>

#include<math.h>

using namespace std;

typedef long long ll;

#define int long long

#define double long double

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef vector<pii> VP;

typedef vector<string> VS;

typedef priority_queue<int> PQ;

template<class T>bool chmax(T &a, const T &b) { if (a < b) { a = b; return 1; } return 0; }

template<class T>bool chmin(T &a, const T &b) { if (b < a) { a = b; return 1; } return 0; }

#define fore(i,a) for(auto &i:a)

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

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

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

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

#define SORT(c) sort((c).begin(),(c).end())

#define rSORT(c) sort((c).rbegin(),(c).rend())

#define LB(x,a) lower_bound((x).begin(),(x).end(),(a))

#define UB(x,a) upper_bound((x).begin(),(x).end(),(a))

#define INF 1000000000

#define LLINF 9223372036854775807

#define mod 1000000007

#define eps 1e-12 

//priority_queue<int,vector<int>, greater<int> > q2;



int N;

vector<VI> G;

VI d;

int q[200005];





void bfs(int s) {

	REP(i, N)d[i] = INF;

	int qh = 0, qt = 0;

	q[qh++] = s;

	d[s] = 0;

	while (qt < qh) {

		int x = q[qt++];

		for (int y : G[x]) {

			if (d[y] == INF) {

				d[y] = d[x] + 1;

				q[qh++] = y;

			}

		}

	}

}





signed main() {

	cin.tie(0);

	ios::sync_with_stdio(false);



	cin >> N;

	d.resize(N);

	G.resize(N);

	REP(i, N - 1) {

		int a, b; cin >> a >> b;

		a--; b--;

		G[a].push_back(b);

		G[b].push_back(a);

	}

	bfs(0);

	VI tmp = d;

	bfs(N - 1);

	int a = 0;

	REP(i, N)if (d[i] < tmp[i])a++;

	if (a < N - a)cout << "Fennec" << endl;

	else cout << "Snuke" << endl;



	return 0;

}




// Fastest known solution for this problem: