# -*- coding: utf-8 -*-

#Python

import sys



N=eval(input())

adj=[[] for i in range(N+1)]



#隣接リスト

for i in range(N-1):

    x,y=list(map(int,input().split()))

    adj[x].append(y)

    adj[y].append(x)



#print adj



#訪問判別フラグ

F=(N+1)*[0]



#Stack

S=[]



#距離

dist=(N+1)*[0]





#先頭から深さ優先探索

S.append(1)

while len(S) != 0:

	#print S

	v=S.pop()

	#print v

	

	if F[v]==0:

		F[v]=1

		#print F

		for u in adj[v]:

			#print "u::"+str(u)

			if F[u]==0:

				S.append(u)

				dist[u]=dist[v]+1

				#print S



#print dist







#訪問判別フラグ

F=(N+1)*[0]



#Stack

S=[]



#距離

dist2=(N+1)*[0]



#最後から深さ優先探索

S.append(N)

while len(S) != 0:

	#print S

	v=S.pop()

	#print v

	

	if F[v]==0:

		F[v]=1

		#print F

		for u in adj[v]:

			#print "u::"+str(u)

			if F[u]==0:

				S.append(u)

				dist2[u]=dist2[v]+1

				#print S



#print dist2







f_p=0

s_p=0

for k in range(1,N+1):

	if dist[k]<=dist2[k]:

		f_p+=1

	else:

		s_p+=1





if f_p>s_p:

	print('Fennec')

else:

	print('Snuke')

# -*- coding: utf-8 -*-

import sys

from collections import deque



N=eval(input())



nl=[ [] for i in range(N+1)]

D=[ 0 for i in range(N+1)]	# No.1からの距離

V=[ 0 for i in range(N+1)]	# 訪問済みフラグ



for i in range(N-1):

	a,b=list(map(int, sys.stdin.readline().split()))

	nl[a].append(b)

	nl[b].append(a)





def bfs(v):	#1からの頂点Nまでの距離を算出

	q = deque([]) 

	V[v]=1

	q.append(v)

	while q:

		v=q.popleft()

		for i in nl[v]:

			if V[i]==0:

				D[i]=D[v]+1

				V[i]=1

				q.append(i)



bfs(1)





L=deque([]) 	#1-Nまでの最短経路を復元 

def bfs2(v):

	q = deque([]) 

	q.append(v)

	while q:

		v=q.popleft()

		for i in nl[v]:

			if D[i]==D[v]-1 and i!=1:

				q.append(i)

				L.appendleft(i)



bfs2(N)





color=[ None for i in range(N+1)]

color[1]="b"

color[N]="w"



l=len(L)

for i in range( (l+1)/2 ):

	color[ L[i] ]="b"



for i in range( (l+1)/2, l ):

	color[ L[i] ]="w"





def bfs3(v):

	q = deque([]) 

	q.append(v)

	while q:

		v=q.popleft()

		for i in nl[v]:

			if color[i] is None:

				color[i]=color[v]

				q.append(i)



L.append(1)

L.append(N)

for i in L:

	bfs3(i)

		



b_cnt=color.count("b")

w_cnt=color.count("w")





if N%2==1:

	if b_cnt>w_cnt:

		print("Fennec")

	else:

		print("Snuke")

else:

	if b_cnt==w_cnt:	

		print("Snuke")

	elif b_cnt>w_cnt:

		print("Fennec")

	else:

		print("Snuke")



# -*- coding: utf-8 -*-
# Python
import sys

N = eval(input())
adj = [[] for i in range(N + 1)]
# 隣接リスト
for i in range(N - 1):
    x, y = list(map(int, input().split()))
    adj[x].append(y)
    adj[y].append(x)
# print adj
# 訪問判別フラグ
F = (N + 1) * [0]
# Stack
S = []
# 距離
dist = (N + 1) * [0]
# 先頭から深さ優先探索
S.append(1)
while len(S) != 0:
    # print S
    v = S.pop()
    # print v
    if F[v] == 0:
        F[v] = 1
        # print F
        for u in adj[v]:
            # print "u::"+str(u)
            if F[u] == 0:
                S.append(u)
                dist[u] = dist[v] + 1
                # print S
# print dist
# 訪問判別フラグ
F = (N + 1) * [0]
# Stack
S = []
# 距離
dist2 = (N + 1) * [0]
# 最後から深さ優先探索
S.append(N)
while len(S) != 0:
    # print S
    v = S.pop()
    # print v
    if F[v] == 0:
        F[v] = 1
        # print F
        for u in adj[v]:
            # print "u::"+str(u)
            if F[u] == 0:
                S.append(u)
                dist2[u] = dist2[v] + 1
                # print S
# print dist2
f_p = 0
s_p = 0
for k in range(1, N + 1):
    if dist[k] <= dist2[k]:
        f_p += 1
    else:
        s_p += 1
if f_p > s_p:
    print("Fennec")
else:
    print("Snuke")

# -*- coding: utf-8 -*-
import sys
from collections import deque

N = eval(input())
nl = [[] for i in range(N + 1)]
D = [0 for i in range(N + 1)]  # No.1からの距離
V = [0 for i in range(N + 1)]  # 訪問済みフラグ
for i in range(N - 1):
    a, b = list(map(int, sys.stdin.readline().split()))
    nl[a].append(b)
    nl[b].append(a)


def bfs(v):  # 1からの頂点Nまでの距離を算出
    q = deque([])
    V[v] = 1
    q.append(v)
    while q:
        v = q.popleft()
        for i in nl[v]:
            if V[i] == 0:
                D[i] = D[v] + 1
                V[i] = 1
                q.append(i)


bfs(1)
L = deque([])  # 1-Nまでの最短経路を復元


def bfs2(v):
    q = deque([])
    q.append(v)
    while q:
        v = q.popleft()
        for i in nl[v]:
            if D[i] == D[v] - 1 and i != 1:
                q.append(i)
                L.appendleft(i)


bfs2(N)
color = [None for i in range(N + 1)]
color[1] = "b"
color[N] = "w"
l = len(L)
for i in range((l + 1) / 2):
    color[L[i]] = "b"
for i in range((l + 1) / 2, l):
    color[L[i]] = "w"


def bfs3(v):
    q = deque([])
    q.append(v)
    while q:
        v = q.popleft()
        for i in nl[v]:
            if color[i] is None:
                color[i] = color[v]
                q.append(i)


L.append(1)
L.append(N)
for i in L:
    bfs3(i)
b_cnt = color.count("b")
w_cnt = color.count("w")
if N % 2 == 1:
    if b_cnt > w_cnt:
        print("Fennec")
    else:
        print("Snuke")
else:
    if b_cnt == w_cnt:
        print("Snuke")
    elif b_cnt > w_cnt:
        print("Fennec")
    else:
        print("Snuke")

-# Python +from collections import deque -adj = [[] for i in range(N + 1)] -# 隣接リスト +nl = [[] for i in range(N + 1)] +D = [0 for i in range(N + 1)]  # No.1からの距離 +V = [0 for i in range(N + 1)]  # 訪問済みフラグ -    x, y = list(map(int, input().split())) -    adj[x].append(y) -    adj[y].append(x) -# print adj -# 訪問判別フラグ -F = (N + 1) * [0] -# Stack -S = [] -# 距離 -dist = (N + 1) * [0] -# 先頭から深さ優先探索 -S.append(1) -while len(S) != 0: -    # print S -    v = S.pop() -    # print v -    if F[v] == 0: -        F[v] = 1 -        # print F -        for u in adj[v]: -            # print "u::"+str(u) -            if F[u] == 0: -                S.append(u) -                dist[u] = dist[v] + 1 -                # print S -# print dist -# 訪問判別フラグ -F = (N + 1) * [0] -# Stack -S = [] -# 距離 -dist2 = (N + 1) * [0] -# 最後から深さ優先探索 -S.append(N) -while len(S) != 0: -    # print S -    v = S.pop() -    # print v -    if F[v] == 0: -        F[v] = 1 -        # print F -        for u in adj[v]: -            # print "u::"+str(u) -            if F[u] == 0: -                S.append(u) -                dist2[u] = dist2[v] + 1 -                # print S -# print dist2 -f_p = 0 -s_p = 0 -for k in range(1, N + 1): -    if dist[k] <= dist2[k]: -        f_p += 1 +    a, b = list(map(int, sys.stdin.readline().split())) +    nl[a].append(b) +    nl[b].append(a) + + +def bfs(v):  # 1からの頂点Nまでの距離を算出 +    q = deque([]) +    V[v] = 1 +    q.append(v) +    while q: +        v = q.popleft() +        for i in nl[v]: +            if V[i] == 0: +                D[i] = D[v] + 1 +                V[i] = 1 +                q.append(i) + + +bfs(1) +L = deque([])  # 1-Nまでの最短経路を復元 + + +def bfs2(v): +    q = deque([]) +    q.append(v) +    while q: +        v = q.popleft() +        for i in nl[v]: +            if D[i] == D[v] - 1 and i != 1: +                q.append(i) +                L.appendleft(i) + + +bfs2(N) +color = [None for i in range(N + 1)] +color[1] = "b" +color[N] = "w" +l = len(L) +for i in range((l + 1) / 2): +    color[L[i]] = "b" +for i in range((l + 1) / 2, l): +    color[L[i]] = "w" + + +def bfs3(v): +    q = deque([]) +    q.append(v) +    while q: +        v = q.popleft() +        for i in nl[v]: +            if color[i] is None: +                color[i] = color[v] +                q.append(i) + + +L.append(1) +L.append(N) +for i in L: +    bfs3(i) +b_cnt = color.count("b") +w_cnt = color.count("w") +if N % 2 == 1: +    if b_cnt > w_cnt: +        print("Fennec") -        s_p += 1 -if f_p > s_p: -    print("Fennec") +        print("Snuke") -    print("Snuke") +    if b_cnt == w_cnt: +        print("Snuke") +    elif b_cnt > w_cnt: +        print("Fennec") +    else: +        print("Snuke")