unittest
{
	assert( [ "7", "3 6", "1 2", "3 1", "7 4", "5 7", "1 4" ].parse.expand.solve == "Fennec" );
	assert( [ "4", "1 4", "4 2", "2 3" ].parse.expand.solve == "Snuke" );
	
	assert( [ "4", "1 2", "2 3", "3 4" ].parse.expand.solve == "Snuke" );		// 追加ケース
}



import std.container;
import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.to!( long );
	auto abs = new long[ 2 ][ n - 1 ];
	foreach( ref ab; abs )
	{
		input.popFront;
		ab = input.front.split.to!( long[] );
		ab[] -= 1;
	}
	return tuple( n, abs );
}

auto solve( long n, long[ 2 ][] abs )
{
	const F = 1L;
	const S = -1L;
	
	auto cs = new long[ n ];
	cs[ 0     ] = F;
	cs[ $ - 1 ] = S;
	
	auto nss = new long[][ n ];
	foreach( ab; abs )
	{
		nss[ ab[ 0 ] ] ~= ab[ 1 ];
		nss[ ab[ 1 ] ] ~= ab[ 0 ];
	}
	
	// お互い最善手で塗った結果を計算
	auto fq = make!DList( 0L,    -1L );
	auto sq = make!DList( n - 1, -1L );
	while( !fq.empty || !sq.empty )
	{
		// フェネックのターン
		solve2( cs, fq, nss, F );
		
		// すぬけくんのターン
		solve2( cs, sq, nss, S );
	}
	
	// 塗ったマス目 = 自分のターン数 なので、マス目の多いほうが勝ち（同数だったら後手の勝ち）
	auto fc = 0L;
	auto sc = 0L;
	foreach( c; cs )
	{
		fc += ( c == F );
		sc += ( c == S );
	}
	return ( fc <= sc ) ? "Snuke" : "Fennec";
}

void solve2( ref long[] cs, ref DList!( long ) queue, long[][] nss, long c )
{
	while( !queue.empty )
	{
		auto f = queue.front;
		queue.removeFront();
		
		if( f == -1 )
		{
			if( !queue.empty ) queue.insertBack( -1 );
			break;
		}
		
		foreach( t; nss[ f ] )
		{
			if( cs[ t ] != 0 ) continue;
			cs[ t ] = c;
			queue.insertBack( t );
		}
	}
}
