import qualified Data.ByteString.Char8 as B
import Data.Maybe
import Data.List
import Data.Array
import Control.Monad

data Player = Fennec | Snuke deriving (Eq,Show)

type Vertex = Int
type Edge = (Vertex,Vertex)
type Graph = Array Vertex [Vertex]

readPair :: B.ByteString -> [Edge]
readPair = (\[a,b] -> [(a,b),(b,a)]) . map (fst . fromJust . B.readInt) . B.words

groupFrom :: [Edge] -> [[Edge]]
groupFrom = groupBy (\(v1,_) (v2,_) -> v1 == v2)

main :: IO ()
main = do
 n <- readLn
 es <- sort . concatMap readPair . B.lines <$> B.getContents
 let g = array (1,n) $ map (\ps -> ((fst.head) ps, map snd ps)) (groupFrom es)
 print (versus n g)

versus :: Vertex -> Graph -> Player
versus n g = if nf > ns then Fennec else Snuke
 where
  vb = let vs = dfsBorder g [] 0 1 n in head (drop (div (length vs) 2) vs)
  nf = dfsDomain g 0 0 1 vb + if vb==1 then 0 else 1
  ns = dfsDomain g 0 0 n vb

dfsBorder :: Graph -> [Vertex] -> Vertex -> Vertex -> Vertex -> [Vertex]
dfsBorder g acc vp v vg
 | v == vg = v:acc
 | null next = mzero
 | otherwise = msum $ map (\vn -> dfsBorder g (v:acc) v vn vg) next
 where next = delete vp (g!v)

dfsDomain :: Graph -> Int -> Vertex -> Vertex -> Vertex -> Int
dfsDomain g acc vp v vg
 | null next = acc
 | v == vg = acc
 | otherwise = sum $ map (\vn -> dfsDomain g (acc+1) v vn vg) next
 where next = delete vp (g!v)