#include <bits/stdc++.h>
using namespace std;

const int N = 5010;
const int mod = 1e9 + 7;

typedef long long LL;

struct edge {
    int to, next;
} e[N * 2];

int head[N], ecnt;

inline void adde(int from, int to) {
    e[++ecnt] = (edge){to, head[from]}, head[from] = ecnt;
    e[++ecnt] = (edge){from, head[to]}, head[to] = ecnt;
}

int f[N][N], g[N], sz[N];

void dfs(int u, int fa) {
    sz[u] = 1, f[u][1] = 1;
    for (int i = head[u]; i; i = e[i].next)
        if (e[i].to != fa) {
            dfs(e[i].to, u);
            static int tmp[N];
            for (int j = 1; j <= sz[e[i].to] + sz[u]; j++) tmp[j] = 0;
            for (int j = 0; j <= sz[e[i].to]; j++)
                for (int k = 1; k <= sz[u]; k++)
                    tmp[j + k] = (tmp[j + k] + (LL)f[e[i].to][j] * f[u][k]) % mod;
            sz[u] += sz[e[i].to];
            for (int j = 1; j <= sz[u]; j++) f[u][j] = tmp[j];
        }
    for (int j = 1; j <= sz[u]; j++)    
        f[u][0] = (f[u][0] - (LL)f[u][j] * g[j] % mod + mod) % mod;
}

int main() {
    int n; scanf("%d", &n);
    for (int i = 1, a, b; i < n; i++) scanf("%d%d", &a, &b), adde(a, b);
    g[0] = 1;
    for (int i = 2; i <= n; i += 2) g[i] = (LL)g[i - 2] * (i - 1) % mod;
    dfs(1, 0), printf("%d\n", mod - f[1][0]);
}
