#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
int n, dp[5007][5007], tmp[5007], g[5007], sz[5007];
vector<int>e[5007];
int read()
{
	int num = 0;
	char c = getchar();
	while (c<'0' || c>'9')c = getchar();
	while (c >= '0' && c <= '9')num = num * 10 + c - '0', c = getchar();
	return num;
}
int dfs(int w, int f)
{
	dp[w][1] = sz[w] = 1;
	for (int i = 0, l = e[w].size(); i < l; i++)
		if (e[w][i] != f)
		{
			dfs(e[w][i], w);
			memset(tmp, 0, sizeof tmp);
			for (int j = 1; j <= sz[w]; j++)
				for (int k = 0; k <= sz[e[w][i]]; k++)
					tmp[j + k] = (tmp[j + k] + 1LL * dp[w][j] * dp[e[w][i]][k] % mod) % mod;
			memcpy(dp[w], tmp, sizeof dp[w]);
			sz[w] += sz[e[w][i]];
		}
	for (int i = 2; i <= sz[w]; i += 2)
		dp[w][0] = (dp[w][0] - 1LL * dp[w][i] * g[i] % mod + mod) % mod;
	return 0;
}
int main()
{
	n = read();
	for (int i = 2; i <= n; i++)
	{
		int a = read(), b = read();
		e[a].push_back(b);
		e[b].push_back(a);
	}
	g[0] = 1;
	for (int i = 2; i <= n; i += 2)
		g[i] = 1LL * g[i - 2] * (i - 1) % mod;
	dfs(1, 0);
	cout << (mod - dp[1][0]) % mod << endl;
	return 0;
}