#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
struct node{
	int u,v,nxtu,nxtv;	
}e[N];
int head[N],tot;
void add(int u,int v){
	e[++tot].u=u;
	e[tot].v=v;
	e[tot].nxtu=head[u];
	e[tot].nxtv=head[v];
	head[u]=tot;
	head[v]=tot;
}
bool vis[N];
int cnt=0,ans=0,n;
void dfs(int eg){
	//cout<<eg<<endl;for (int i=1;i<11000000;i++);
	cnt++;
	vis[eg]=1;
	if (cnt==n-1){
		ans++;
	}
	else{
		int u=e[eg].u,v=e[eg].v;
		for (int i=head[u];i;){
			if (!vis[i]) dfs(i);
			if (e[i].u==u) i=e[i].nxtu;
				else i=e[i].nxtv;
		}
		for (int i=head[v];i;){
			if (!vis[i]) dfs(i);
			if (e[i].u==v) i=e[i].nxtu;
				else i=e[i].nxtv;
		}
	}
	cnt--;	vis[eg]=0;
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int c,t,k,u,v;
	scanf("%d%d",&c,&t);
	if (c>6){
		for (int i=1;i<=t;i++) cout<<1<<endl;
	}
	if (c<=6){
		scanf("%d%d",&n,&k);
		for (int i=1;i<n;i++){
			scanf("%d%d",&u,&v);
			if (u>v) swap(u,v);
			add(u,v);
		}
		int a;
		scanf("%d",&a);
		dfs(a);
		cout<<ans;
	}
	return 0;
}
