import std.algorithm;
import std.array;
import std.conv;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

int solve (int n)
{
	auto a = new int [] [n];
	foreach (j; 0..n - 1)
	{
		int u, v;
		readf (" %s %s", &u, &v);
		u -= 1;
		v -= 1;
		a[u] ~= v;
		a[v] ~= u;
	}

	auto p = new int [n];
	auto d = new int [n];

	void recur (int v, int w, int c)
	{
		p[v] = w;
		d[v] = c;
		foreach (u; a[v])
		{
			if (u != w)
			{
				recur (u, v, c + 1);
			}
		}
	}

	recur (0, -1, 0);

	auto e = new int [n];
	int h = d[n - 1];
	int [] path;
	for (int v = n - 1; v != 0; v = p[v])
	{
		path ~= v;
	}
	path ~= 0;
	reverse (path);
	while (true)
	{
		if (path.empty)
		{
			break;
		}
		e[path.front] = 1;
		path.popFront ();
		if (path.empty)
		{
			break;
		}
		e[path.back] = 2;
		path.popBack ();
	}

	void color (int v, int c)
	{
		foreach (u; a[v])
		{
			if (e[u] == 0)
			{
				e[u] = c;
				color (u, c);
			}
		}
	}

	foreach (v; 0..n)
	{
		if (e[v] != 0)
		{
			color (v, e[v]);
		}
	}

	foreach (v; 0..n)
	{
		if (e[v] == 0)
		{
			assert (false);
		}
	}

	return e.count (1) > e.count (2);
}

void main ()
{
	int n;
	while (readf (" %s", &n) > 0)
	{
		writeln (solve (n) ? "Fennec" : "Snuke");
	}
}
