#include<bits/stdc++.h>
#define cal(x,y) ((x+=y)%=mo)
using namespace std;
const int N=5050,mo=1e9+7;
inline int gi() {
  char ch=getchar(); int q=0,x=0;
  while(ch<'0'||ch>'9') q=(ch=='-'?1:q),ch=getchar();
  while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
  return q?(-x):x;
}
int head[N],nn[N<<1][2],f[N][N],siz[N],tmp[N],g[N],cnt;
#define link(u,v) (nn[++cnt][1]=v,nn[cnt][0]=head[u],head[u]=cnt)
void dfs(int x,int fa){
  f[x][1]=1,siz[x]=1;
  for (int t=head[x],y; t; t=nn[t][0])
    if ((y=nn[t][1])!=fa){
      dfs(y,x);
      for (int i=1; i<=siz[x]+siz[y]; ++i)
	tmp[i]=0;
      for (int i=1; i<=siz[x]; ++i)
	for (int j=1; j<=siz[y]; ++j){
	  cal(tmp[i],mo-1ll*f[x][i]*f[y][j]%mo*g[j]%mo);
	  cal(tmp[i+j],1ll*f[x][i]*f[y][j]%mo);
	}
      siz[x]+=siz[y];
      for (int i=1; i<=siz[x]; ++i)
	f[x][i]=tmp[i];
    }
  return;
}
int main(){
  int n=gi(),u,v;
  for (int i=1; i<n; ++i)
    u=gi(),v=gi(),link(u,v),link(v,u);
  g[0]=g[1]=1;
  for (int i=2; i<=n; ++i)
    g[i]=1ll*g[i-2]*(i-1)%mo;
  for (int i=1; i<=n; i+=2)
    g[i]=0;
  dfs(1,0);
  int ans=0;
  for (int i=1; i<=n; ++i)
    cal(ans,1ll*f[1][i]*g[i]%mo);
  cout<<ans;
  return 0;
}