```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n, x, y int
fmt.Fscan(reader, &n, &x, &y)
adj := make([][]int, n+1)
for i := 0; i < n-1; i++ {
var u, v int
fmt.Fscan(reader, &u, &v)
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
}
sz := make([]int, n+1)
var childWithY int
var dfs func(u, p int) bool
dfs = func(u, p int) bool {
sz[u] = 1
hasY := (u == y)
for _, v := range adj[u] {
if v != p {
containsY := dfs(v, u)
sz[u] += sz[v]
if containsY {
hasY = true
if u == x {
childWithY = v
}
}
}
}
return hasY
}
dfs(x, 0)
cntX := int64(n - sz[childWithY])
cntY := int64(sz[y])
totalPairs := int64(n) * int64(n-1)
ans := totalPairs - (cntX * cntY)
fmt.Fprintln(writer, ans)
}
```