#include<cstdio>
#include<cstring>
#define retrun return
#define cpnst const
int n;
typedef long long ll;
cpnst ll mod=1e9+7;
ll dp[5333][5333],facc[5555];
#include<vector>
std::vector<int>v[5333];
int siz[5555];
ll tmp[5555];
void mul(ll*x,ll*y,int szx,int szy)
{
	register int i,ii;
	for(i=0;i<=szx;i++)
		for(ii=0;ii<=szy;ii++)
			(tmp[i+ii]+=x[i]*y[ii])%=mod;
	for(i=0;i<=szx+szy;i++)x[i]=tmp[i],tmp[i]=0;
}
void dfs(int p=1,int f=0)
{
	dp[p][1]=siz[p]=1;
	register int i;
	for(auto t:v[p])
		if(t^f)
			dfs(t,p),mul(dp[p],dp[t],siz[p],siz[t]),siz[p]+=siz[t];
	for(i=1;i<=siz[p];i++)(dp[p][0]+=mod-facc[i]*dp[p][i]%mod)%=mod;
}
int main()
{
	scanf("%d",&n);
	register int i;
	for(facc[0]=1,i=2;i<=n;i+=2)facc[i]=facc[i-2]*(i-1)%mod;
	for(i=1;i<n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		v[x].push_back(y),v[y].push_back(x);
	}dfs(),printf("%lld\n",(mod-dp[1][0])%mod);
}
/*
Just go for it.
*/