import core.bitop;
import std.algorithm;
import std.array;
import std.ascii;
import std.container;
import std.conv;
import std.format;
import std.math;
import std.random;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void main()
{
  int n = readln.chomp.to!int;
  int[][] adj = new int[][](n);
  foreach (i; 0..n-1) {
    auto ab = readln.chomp.split.map!(to!int).map!(a => a - 1);
    adj[ab.front] ~= ab.back;
    adj[ab.back] ~= ab.front;
  }
  alias Node = Tuple!(int, "step", bool, "isSnuke", int, "now");
  alias RBT = RedBlackTree!(Node);
  RBT queue = new RBT();
  queue.insert(Node(0, false, 0));
  queue.insert(Node(0, true, n - 1));
  bool[] done = new bool[](n);
  int cnt = 0;
  while (queue.length) {
    Node node = queue.front;
    queue.removeFront;
    if (done[node.now]) {
      continue;
    }
    done[node.now] = true;
    if (node.isSnuke) {
      ++cnt;
    }
    foreach (to; adj[node.now]) {
      queue.insert(Node(node.step + 1, node.isSnuke, to));
    }
  }
  if (cnt == n - cnt) {
    "Snuke".writeln;
  } else if (cnt > n - cnt) {
    "Snuke".writeln;
  } else {
    "Fennec".writeln;
  }
}
