```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
if !scanner.Scan() {
return
}
nStr := scanner.Text()
n, _ := strconv.Atoi(nStr)
const mod = 998244353
ans := int64(1)
for i := 1; i <= 2*n-3; i += 2 {
ans = (ans * int64(i)) % mod
}
parent := make([]int, n+1)
size := make([]int64, n+1)
for i := 1; i <= n; i++ {
parent[i] = i
size[i] = 1
}
find := func(i int) int {
r := i
for r != parent[r] {
r = parent[r]
}
c := i
for c != r {
nxt := parent[c]
parent[c] = r
c = nxt
}
return r
}
for i := 1; i < n; i++ {
scanner.Scan()
u, _ := strconv.Atoi(scanner.Text())
scanner.Scan()
v, _ := strconv.Atoi(scanner.Text())
rootU := find(u)
rootV := find(v)
su := size[rootU]
sv := size[rootV]
term := (su * sv) % mod
term = (term * term) % mod
ans = (ans * term) % mod
parent[rootV] = rootU
size[rootU] += sv
}
fmt.Println(ans)
}
```