stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
#include <iostream>

#include <vector>

#include <string>

#include <algorithm>

#include <stdio.h>

#include <cmath>

using namespace std;



int to_int(string s){

    int number = 0;

    for(int i=0;i<s.size();i++){

        number *= 10;

        number += s[i] - '0';

    }

    return number;

}



string to_str(int n){

    string s;

    while(n!=0){

        s += n % 10 + 48;

        n /= 10;

    }

    reverse(s.begin(),s.end());

    return s;

}



bool isLeapYear(int year)

{

    if(((year % 4 == 0 ) && (year % 100 != 0)) || (year % 400 == 0))

        return true;

    else

        return false;

}



bool isPrime(int n)

{

    if (n == 2)

        return true;

    if ((n & 1)==0)

        return false;

    for (int i = 3; i*i <= n;i+=2) {

        if (n%i == 0)

            return false;

    }



    return true;

}



/*#define row 5001

#define col 10000



int arr[row][col];



void fib()

{

    arr[0][0] = 0;

    arr[1][0] = 1;

    for(int i=2;i<row;i++){

        for(int j=0;j<col;j++){

            if(arr[i-1][j] + arr[i-2][j] == 0)

                continue;

            arr[i][j] += arr[i-1][j] + arr[i-2][j];

            if(arr[i][j] > 9){

                arr[i][j+1] = arr[i][j]/10;

                arr[i][j] %= 10;

            }

        }

    }

}*/



int main()

{

    int a, b, c;

    cin >> a >> b >> c;

    if((b-a) == (c-b))

        cout << "YES" << endl;

    else

        cout << "NO" << endl;



    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.312985759542989x):
#include <stdio.h>



int main(){

	int a,b,c;

	scanf ("%d %d %d",&a,&b,&c);

	if (b-a==c-b)

	{

		printf ("YES\n");

	}

	else printf ("NO\n");

}
// Slower C++ solution:
#include<iostream>

using namespace std;



int main ()

{

    int a, b, c;



    cin>>a>>b>>c;



    if (b-a==c-b)

    {

        cout<<"YES";

    }

    else

    {

        cout<<"NO";

    }

}


// Faster C++ solution for the same problem (measured speedup: 5.299532995677264x):
#include <stdio.h>



int main(){

	int a,b,c;

	scanf ("%d %d %d",&a,&b,&c);

	if (b-a==c-b)

	{

		printf ("YES\n");

	}

	else printf ("NO\n");

}
// Slower C++ solution:
//程序名:新的C++程序

//作者: 



#include<iostream>

#include<fstream>

#include<algorithm>



using namespace std;

int main()

{

     int a,b,c;

	 cin>>a>>b>>c;

	 if(b-a==c-b) cout<<"YES";

	 else cout<<"NO";



    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.254842050199279x):
#include <cstdio>

using namespace std;

int a,b,c;

int main ()

{

	scanf ("%d %d %d",&a,&b,&c);

	printf ("%s\n",b-a==c-b?"YES":"NO");

	return 0;

}
// Slower C++ solution:
#include<iostream>

using namespace std;



int main(){

  int a,b,c;

  cin>>a>>b>>c;

  cout<<(b-a==c-b?"YES":"NO");

  return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.254551909649189x):
#include <cstdio>

using namespace std;

int a,b,c;

int main ()

{

	scanf ("%d %d %d",&a,&b,&c);

	printf ("%s\n",b-a==c-b?"YES":"NO");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main()

{

	int a,b,c;

	cin>>a>>b>>c;

	if(b-a==c-b) cout<<"YES"<<endl;

	else cout<<"NO"<<endl;

	

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.268268525419516x):
#include <cstdio>

using namespace std;

int a,b,c;

int main ()

{

	scanf ("%d %d %d",&a,&b,&c);

	printf ("%s\n",b-a==c-b?"YES":"NO");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main()

{

    int a , b , c;

    cin >> a >> b >> c;

    if(a - b == b - c) cout << "YES";

    else cout << "NO";

    cout << endl;

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.275455106572258x):
#include <cstdio>

using namespace std;

int a,b,c;

int main ()

{

	scanf ("%d %d %d",&a,&b,&c);

	printf ("%s\n",b-a==c-b?"YES":"NO");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main(){

    int a,b,c;

    cin>>a>>b>>c;

    if(a-b==b-c)

    {

    cout<<"YES";

    return 0;

    }

    cout<<"NO"<<endl;

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.267951677074362x):
#include <cstdio>

using namespace std;

int a,b,c;

int main ()

{

	scanf ("%d %d %d",&a,&b,&c);

	printf ("%s\n",b-a==c-b?"YES":"NO");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

bool zs(int n)

{

	for(int i=2;i*i<=n;++i)

		if(n%i==0)

			return false;

	return true;

}

bool hw(int n)

{

	int m=0,k=n;

	while(k!=0)

	{

		m=m*10+k%10;

		k/=10;

	}

	if(m==n)

		return true;

	return false;

}

int main()

{

	int a,b,c;

	cin>>a>>b>>c;

	if(b-a==c-b)

		cout<<"YES";

	else

		cout<<"NO";

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.255261020756041x):
#include <cstdio>

using namespace std;

int a,b,c;

int main ()

{

	scanf ("%d %d %d",&a,&b,&c);

	printf ("%s\n",b-a==c-b?"YES":"NO");

	return 0;

}
// Slower C++ solution:
#include<iostream>

using namespace std;

int a,b,c;

int main()

{

	cin>>a>>b>>c;

	if(b-a==c-b)

	    cout<<"YES";

	else

	    cout<<"NO";

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.212492380371027x):
#include <cstdio>

using namespace std;

int a,b,c;

int main ()

{

	scanf ("%d %d %d",&a,&b,&c);

	printf ("%s\n",b-a==c-b?"YES":"NO");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

#define ll long long int

int main()

{

    int a,c,b;

   // string s,ss;

    cin>>a>>b>>c;

    if((b-a)==(c-b))

        cout<<"YES"<<endl;

    else

        cout<<"NO"<<endl;

}














// Faster C++ solution for the same problem (measured speedup: 5.313073659272013x):
#include <cstdio>

using namespace std;

int main ()

{

    int a,b,c;

    scanf("%d %d %d",&a,&b,&c);

    int x=b-a;

    int y=c-b;

    if(x==y)

    printf("YES\n");



    else

        printf("NO\n");

        return 0;



}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;





int main()

{

    int a,b,c,A,B;



    cin>>a>>b>>c;

     A=b-a;

     B=c-b;

    if(A==B)printf("YES\n");

    else cout<<"NO\n";

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.29875306974963x):
#include <cstdio>

using namespace std;

int main ()

{

    int a,b,c;

    scanf("%d %d %d",&a,&b,&c);

    int x=b-a;

    int y=c-b;

    if(x==y)

    printf("YES\n");



    else

        printf("NO\n");

        return 0;



}
// Slower C++ solution:
#include <iostream>

using namespace std;

int main()

{

    int a,b,c;

    cin>>a>>b>>c;

    if(b-a==c-b) cout<<"YES"<<endl;

        else cout<<"NO"<<endl;

}

// Faster C++ solution for the same problem (measured speedup: 5.31553155988926x):
#include<cstdio>

using namespace std;

int a,b,c;

int main(){

	scanf("%d%d%d",&a,&b,&c);

	if(b-a==c-b) printf("YES\n");

	else printf("NO\n");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;







int main()

{

	int a,b,c;

	cin>>a>>b>>c;

	if(b-a == c-b)

	cout<<"YES";

	else 

	cout<<"NO";	

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.2992378237799995x):
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include<algorithm>

using namespace std;

int main()

{

    int a, b, c;

    scanf("%d %d %d", &a, &b, &c);

   if(b-a == c-b) printf("YES");

   else printf("NO");

    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int a,b,c;

int main()

{

	cin>>a>>b>>c;

	if(b-a==c-b) cout<<"YES"<<endl;

	else cout<<"NO"<<endl;



	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.26997867080613x):
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include<algorithm>

using namespace std;

int main()

{

    int a, b, c;

    scanf("%d %d %d", &a, &b, &c);

   if(b-a == c-b) printf("YES");

   else printf("NO");

    return 0;

}
// Slower C++ solution:
#include<cstdio>

#include<iostream>

#include<string>

#include<algorithm>

using namespace std;





int main()

{

	int a[5], len = 0;

	string st;



	for (int i = 1; i <= 3; i++)

	{

		cin >> a[i];

	}

	

	if (a[3] - a[2] == a[2] - a[1])

		cout << "YES" << endl;

	else

		cout << "NO" << endl;



	return 0; 

}

// Faster C++ solution for the same problem (measured speedup: 5.312459767016186x):
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include<algorithm>

using namespace std;

int main()

{

    int a, b, c;

    scanf("%d %d %d", &a, &b, &c);

   if(b-a == c-b) printf("YES");

   else printf("NO");

    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main()

{

    int a,b,c;

    while(cin>>a>>b>>c)

    {

        if((b-a)==(c-b))

            cout<<"YES"<<endl;

        else

            cout<<"NO"<<endl;

    }

}


// Faster C++ solution for the same problem (measured speedup: 5.216835313117178x):
#include<stdio.h>

#include<stdlib.h>

int main(void){

	int a,b,c;

	scanf("%d%d%d",&a,&b,&c);

	if((b-a)==(c-b)){

		printf("YES\n");

	} else{

		printf("NO\n");

	}

	system("pause");

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main()

{

    int a,b,c;

    cin>>a>>b>>c;

    if(b-a==c-b)

        cout<<"YES"<<endl;

    else

        cout<<"NO"<<endl;

}


// Faster C++ solution for the same problem (measured speedup: 5.21567073713833x):
#include<stdio.h>

#include<stdlib.h>

int main(void){

	int a,b,c;

	scanf("%d%d%d",&a,&b,&c);

	if((b-a)==(c-b)){

		printf("YES\n");

	} else{

		printf("NO\n");

	}

	system("pause");

}
// Slower C++ solution:
#include<iostream>

#include<cstring>

#include<string>

#include<algorithm>

#include<cstdio>

#include<queue>

using namespace std;

#define N 100002

int dis1[N],dis2[N];

int vis[N];

vector<int> g[N];

queue<int> q;

int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};

void BFS1() //从哪个节点开始 

{

	int i,now;

	int st; 

	while( !q.empty() )

	{

		st = q.front();

		q.pop();

		for( i=0;i<g[st].size();i++ )

		{

			now = g[st][i];

			if( vis[now] )

				continue;

			vis[now]=1;

			dis1[now] = dis1[st] + 1;

			q.push(now);

		}

	}

}

void BFS2() //从哪个节点开始 

{

	int i,now;

	int st; 

	while( !q.empty() )

	{

		st = q.front();

		q.pop();

		for( i=0;i<g[st].size();i++ )

		{

			now = g[st][i];

			if( vis[now] )

				continue;

			vis[now]=1;

			dis2[now] = dis2[st] + 1;

			q.push(now);

		}

	}

}

int main(){

	int to,from,i,n;

	cin>>n;

	for( i=0;i<n-1;i++ ){

		cin>>to>>from;

		g[to].push_back(from);

		g[from].push_back(to);

	}

	q.push(1);

	BFS1();

	memset(vis,0,sizeof(vis));

	q.push(n);

	BFS2();

	int cntF=0;

	for( i=1;i<=n;i++ )

	{

		if( dis1[i]<=dis2[i] )

			cntF++;

	}

	int cntS = n-cntF;

	if( cntF>cntS )

		cout<<"Fennec\n";

	else

		cout<<"Snuke\n";

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.108679856267093x):
#include<bits/stdc++.h>

using namespace std;

#define ALL(x) (x).begin(),(x).end()

#define uniq(x) (x).erase(unique(ALL(x)),(x).end())

#define SORT(x) sort(ALL(x))

#define REV(x) reverse(ALL(x))

#define foreach(it,x) for(__typeof((x).begin()) it=(x).begin();it!=(x).end();it++)

#define debug(x) cerr<<#x<<"="<<(x)<<endl

#define gett() cerr<<"Time:"<<clock()<<"ms."<<endl

#define ri(x) scanf("%d",&x)

#define rl(x) scanf("%lld",&x)

#define rlcfpoj(x) scanf("%I64d",&x)

#define pi(x) printf("%d",x)

#define pl(x) printf("%lld",x)

#define plcfpoj(x) printf("%I64d",x)

#define lfd() printf("\n")

#define sp() printf(" ")

#define inrep(x) int x;scanf("%d",&x);while(x--)

#define testbit(mask,i) (((mask)>>(i))&1)

#define setbit(mask,i) ((mask)|(1<<i))

#define delbit(mask,i) ((mask)^(1<<i))

int n,u,v;

int dist1[100100],dist2[100100];

vector<int> ga[100100];

void dfs1(int u,int p){

	dist1[u]=dist1[p]+1;

	for(int i=0;i<ga[u].size();i++){

		int v=ga[u][i];

		if(v!=p)

			dfs1(v,u);

	}

}

void dfs2(int u,int p){

	dist2[u]=dist2[p]+1;

	for(int i=0;i<ga[u].size();i++){

		int v=ga[u][i];

		if(v!=p)

			dfs2(v,u);

	}

}

int main(){

	//freopen("input.txt","r",stdin);

	//freopen("output.txt","w",stdout);

	ios::sync_with_stdio(false);

	cin.tie(NULL);

	cout.tie(NULL);

	cin>>n;

	for(int i=1;i<n;i++){

		cin>>u>>v;

		ga[u].push_back(v);

		ga[v].push_back(u);

	}

	dfs1(1,0);

	dfs2(n,0);

	int snuke=0,fennec=0;

	for(int i=1;i<=n;i++){

		if(dist1[i]<=dist2[i])

			fennec++;

		else

			snuke++;

	}

	if(snuke>=fennec)

		cout<<"Snuke"<<endl;

	else

		cout<<"Fennec"<<endl;

	return 0;

}
// Slower C++ solution:
#include<iostream>

#include<cstring>

#include<string>

#include<algorithm>

#include<cstdio>

#include<queue>

using namespace std;

#define N 100002

int dis1[N],dis2[N];

int vis[N];

vector<int> g[N];

queue<int> q;

int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};

void BFS1() //从哪个节点开始 

{

	int i,now;

	int st; 

	while( !q.empty() )

	{

		st = q.front();

		q.pop();

		for( i=0;i<g[st].size();i++ )

		{

			now = g[st][i];

			if( vis[now] )

				continue;

			vis[now]=1;

			dis1[now] = dis1[st] + 1;

			q.push(now);

		}

	}

}

void BFS2() //从哪个节点开始 

{

	int i,now;

	int st; 

	while( !q.empty() )

	{

		st = q.front();

		q.pop();

		for( i=0;i<g[st].size();i++ )

		{

			now = g[st][i];

			if( vis[now] )

				continue;

			vis[now]=1;

			dis2[now] = dis2[st] + 1;

			q.push(now);

		}

	}

}

int main(){

	int to,from,i,n;

	cin>>n;

	for( i=0;i<n-1;i++ ){

		cin>>to>>from;

		g[to].push_back(from);

		g[from].push_back(to);

	}

	q.push(1);

	BFS1();

	memset(vis,0,sizeof(vis));

	q.push(n);

	BFS2();

	int cntF=0;

	for( i=1;i<=n;i++ )

	{

		if( dis1[i]<=dis2[i] )

			cntF++;

	}

	int cntS = n-cntF;

	if( cntF>cntS )

		cout<<"Fennec\n";

	else

		cout<<"Snuke\n";

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 3.8624471101332043x):
#include<bits/stdc++.h>

using namespace std;

#define SZ(v) ((int)(v).size())

#define rep(i,n) for(int i=0;i<(n);i++)

#define foreach(it,c) for(__typeof(c.begin()) it=c.begin();it!=c.end();it++)

#define all(v) (v).begin(),(v).end()

typedef long long ll;

typedef unsigned uint;

const int INF=0x3f3f3f3f;

int inline in(){int x=0,c;for(;(uint)((c=getchar())-'0')>=10;)

{if(c=='-')return -in();if(!~c)throw ~0;}do{x=(x<<3)+(x<<1)+(c-'0');}

while((uint)((c=getchar())-'0')<10);return x;}

int n;

const int MAXN=1e5+5;

int ghead[MAXN],gnxt[2*MAXN],gto[2*MAXN];

int path[MAXN],npath;

int col[MAXN];

bool dfs(int v,int p){

	if(v==n-1){

		npath=0;path[npath++]=v;return true;

	}

	for(int x=ghead[v];x!=-1;x=gnxt[x]){

		int to=gto[x];

		if(to!=p){

			if(dfs(to,v)){

				path[npath++]=v;return true;

			}

		}

	}

	return false;

}

void dfscol(int v,int p){

	for(int x=ghead[v];x!=-1;x=gnxt[x]){

		int to=gto[x];

		if(to!=p&&col[to]==-1){

			col[to]=col[v];

			dfscol(to,v);

		}

	}

}

int main(){

    cin.sync_with_stdio(false);cin.tie(0);

	cin>>n;

	rep(i,n)ghead[i]=-1;

	rep(i,n-1){

		int a,b;

		cin>>a>>b;

		--a;--b;

		gnxt[2*i+0]=ghead[a];ghead[a]=2*i+0;gto[2*i+0]=b;

		gnxt[2*i+1]=ghead[b];ghead[b]=2*i+1;gto[2*i+1]=a;

	}

	dfs(0,0);

	reverse(path,path+npath);

//	rep(i,npath)cout<<path[i]<<' ';cout<<endl;

	rep(i,n)col[i]=-1;

	rep(i,npath)col[path[i]]=i<(npath+1)/2?0:1;

	rep(i,npath)dfscol(path[i],path[i]);

	int na=0,nb=0;

	rep(i,n){

		if(col[i]==0)na++;

		else nb++;

	}

//	rep(i,n)cout<<col[i]<<' ';cout<<endl;

//	cout<<na<<' '<<nb<<endl;

	string ans=na>nb?"Fennec":"Snuke";

	cout<<ans<<endl;

	return 0;

}
// Slower C++ solution:
#include<iostream>

#include<cstring>

#include<string>

#include<algorithm>

#include<cstdio>

#include<queue>

using namespace std;

#define N 100002

int dis1[N],dis2[N];

int vis[N];

vector<int> g[N];

queue<int> q;

int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};

void BFS1() //从哪个节点开始 

{

	int i,now;

	int st; 

	while( !q.empty() )

	{

		st = q.front();

		q.pop();

		for( i=0;i<g[st].size();i++ )

		{

			now = g[st][i];

			if( vis[now] )

				continue;

			vis[now]=1;

			dis1[now] = dis1[st] + 1;

			q.push(now);

		}

	}

}

void BFS2() //从哪个节点开始 

{

	int i,now;

	int st; 

	while( !q.empty() )

	{

		st = q.front();

		q.pop();

		for( i=0;i<g[st].size();i++ )

		{

			now = g[st][i];

			if( vis[now] )

				continue;

			vis[now]=1;

			dis2[now] = dis2[st] + 1;

			q.push(now);

		}

	}

}

int main(){

	int to,from,i,n;

	cin>>n;

	for( i=0;i<n-1;i++ ){

		cin>>to>>from;

		g[to].push_back(from);

		g[from].push_back(to);

	}

	q.push(1);

	BFS1();

	memset(vis,0,sizeof(vis));

	q.push(n);

	BFS2();

	int cntF=0;

	for( i=1;i<=n;i++ )

	{

		if( dis1[i]<=dis2[i] )

			cntF++;

	}

	int cntS = n-cntF;

	if( cntF>cntS )

		cout<<"Fennec\n";

	else

		cout<<"Snuke\n";

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 20.634252943949033x):
#include <cstdio>

#define N 100005

int n;

struct edge{

    int to,next;

}e[N<<1];

int head[N],cnt;

void add(int u,int v){

    e[++cnt]=(edge){v,head[u]};

    head[u]=cnt;

}

int son[N];

int path[N],len;

bool dfs(int x,int fa){

    bool p=x==n;

    for(int i=head[x];i;i=e[i].next){

        int v=e[i].to;

        if(v==fa)continue;

        p|=dfs(v,x);

    }

    son[fa]+=son[x]+1;

    if(p){

        path[++len]=x;

        return true;

    }

    return false;

}

int main(){

    scanf("%d",&n);

    for(int i=1,u,v;i<n;++i){

        scanf("%d%d",&u,&v);

        add(u,v);add(v,u);

    }

    dfs(1,0);

    int ans=0;

    for(int i=len;i>len/2;--i)

        ans+=son[path[i]]-son[path[i-1]];

    printf("%s\n",ans*2>n?"Fennec":"Snuke");

    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

#define ALL(x) (x).begin(),(x).end()

#define uniq(x) (x).erase(unique(ALL(x)),(x).end())

#define SORT(x) sort(ALL(x))

#define REV(x) reverse(ALL(x))

#define foreach(it,x) for(__typeof((x).begin()) it=(x).begin();it!=(x).end();it++)

#define debug(x) cerr<<#x<<"="<<(x)<<endl

#define gett() cerr<<"Time:"<<clock()<<"ms."<<endl

#define ri(x) scanf("%d",&x)

#define rl(x) scanf("%lld",&x)

#define rlcfpoj(x) scanf("%I64d",&x)

#define pi(x) printf("%d",x)

#define pl(x) printf("%lld",x)

#define plcfpoj(x) printf("%I64d",x)

#define lfd() printf("\n")

#define sp() printf(" ")

#define inrep(x) int x;scanf("%d",&x);while(x--)

#define testbit(mask,i) (((mask)>>(i))&1)

#define setbit(mask,i) ((mask)|(1<<i))

#define delbit(mask,i) ((mask)^(1<<i))

int n,u,v;

int dist1[100100],dist2[100100];

vector<int> ga[100100];

void dfs1(int u,int p){

	dist1[u]=dist1[p]+1;

	for(int i=0;i<ga[u].size();i++){

		int v=ga[u][i];

		if(v!=p)

			dfs1(v,u);

	}

}

void dfs2(int u,int p){

	dist2[u]=dist2[p]+1;

	for(int i=0;i<ga[u].size();i++){

		int v=ga[u][i];

		if(v!=p)

			dfs2(v,u);

	}

}

int main(){

	//freopen("input.txt","r",stdin);

	//freopen("output.txt","w",stdout);

	ios::sync_with_stdio(false);

	cin.tie(NULL);

	cout.tie(NULL);

	cin>>n;

	for(int i=1;i<n;i++){

		cin>>u>>v;

		ga[u].push_back(v);

		ga[v].push_back(u);

	}

	dfs1(1,0);

	dfs2(n,0);

	int snuke=0,fennec=0;

	for(int i=1;i<=n;i++){

		if(dist1[i]<=dist2[i])

			fennec++;

		else

			snuke++;

	}

	if(snuke>=fennec)

		cout<<"Snuke"<<endl;

	else

		cout<<"Fennec"<<endl;

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 18.611552133204825x):
#include <cstdio>

#define N 100005

int n;

struct edge{

    int to,next;

}e[N<<1];

int head[N],cnt;

void add(int u,int v){

    e[++cnt]=(edge){v,head[u]};

    head[u]=cnt;

}

int son[N];

int path[N],len;

bool dfs(int x,int fa){

    bool p=x==n;

    for(int i=head[x];i;i=e[i].next){

        int v=e[i].to;

        if(v==fa)continue;

        p|=dfs(v,x);

    }

    son[fa]+=son[x]+1;

    if(p){

        path[++len]=x;

        return true;

    }

    return false;

}

int main(){

    scanf("%d",&n);

    for(int i=1,u,v;i<n;++i){

        scanf("%d%d",&u,&v);

        add(u,v);add(v,u);

    }

    dfs(1,0);

    int ans=0;

    for(int i=len;i>len/2;--i)

        ans+=son[path[i]]-son[path[i-1]];

    printf("%s\n",ans*2>n?"Fennec":"Snuke");

    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

#define SZ(v) ((int)(v).size())

#define rep(i,n) for(int i=0;i<(n);i++)

#define foreach(it,c) for(__typeof(c.begin()) it=c.begin();it!=c.end();it++)

#define all(v) (v).begin(),(v).end()

typedef long long ll;

typedef unsigned uint;

const int INF=0x3f3f3f3f;

int inline in(){int x=0,c;for(;(uint)((c=getchar())-'0')>=10;)

{if(c=='-')return -in();if(!~c)throw ~0;}do{x=(x<<3)+(x<<1)+(c-'0');}

while((uint)((c=getchar())-'0')<10);return x;}

int n;

const int MAXN=1e5+5;

int ghead[MAXN],gnxt[2*MAXN],gto[2*MAXN];

int path[MAXN],npath;

int col[MAXN];

bool dfs(int v,int p){

	if(v==n-1){

		npath=0;path[npath++]=v;return true;

	}

	for(int x=ghead[v];x!=-1;x=gnxt[x]){

		int to=gto[x];

		if(to!=p){

			if(dfs(to,v)){

				path[npath++]=v;return true;

			}

		}

	}

	return false;

}

void dfscol(int v,int p){

	for(int x=ghead[v];x!=-1;x=gnxt[x]){

		int to=gto[x];

		if(to!=p&&col[to]==-1){

			col[to]=col[v];

			dfscol(to,v);

		}

	}

}

int main(){

    cin.sync_with_stdio(false);cin.tie(0);

	cin>>n;

	rep(i,n)ghead[i]=-1;

	rep(i,n-1){

		int a,b;

		cin>>a>>b;

		--a;--b;

		gnxt[2*i+0]=ghead[a];ghead[a]=2*i+0;gto[2*i+0]=b;

		gnxt[2*i+1]=ghead[b];ghead[b]=2*i+1;gto[2*i+1]=a;

	}

	dfs(0,0);

	reverse(path,path+npath);

//	rep(i,npath)cout<<path[i]<<' ';cout<<endl;

	rep(i,n)col[i]=-1;

	rep(i,npath)col[path[i]]=i<(npath+1)/2?0:1;

	rep(i,npath)dfscol(path[i],path[i]);

	int na=0,nb=0;

	rep(i,n){

		if(col[i]==0)na++;

		else nb++;

	}

//	rep(i,n)cout<<col[i]<<' ';cout<<endl;

//	cout<<na<<' '<<nb<<endl;

	string ans=na>nb?"Fennec":"Snuke";

	cout<<ans<<endl;

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.342274562107186x):
#include <cstdio>

#define N 100005

int n;

struct edge{

    int to,next;

}e[N<<1];

int head[N],cnt;

void add(int u,int v){

    e[++cnt]=(edge){v,head[u]};

    head[u]=cnt;

}

int son[N];

int path[N],len;

bool dfs(int x,int fa){

    bool p=x==n;

    for(int i=head[x];i;i=e[i].next){

        int v=e[i].to;

        if(v==fa)continue;

        p|=dfs(v,x);

    }

    son[fa]+=son[x]+1;

    if(p){

        path[++len]=x;

        return true;

    }

    return false;

}

int main(){

    scanf("%d",&n);

    for(int i=1,u,v;i<n;++i){

        scanf("%d%d",&u,&v);

        add(u,v);add(v,u);

    }

    dfs(1,0);

    int ans=0;

    for(int i=len;i>len/2;--i)

        ans+=son[path[i]]-son[path[i-1]];

    printf("%s\n",ans*2>n?"Fennec":"Snuke");

    return 0;

}