func checkEqualPartitions(nums []int, target int64) bool {
all := 1
for _, x := range nums {
all *= x
}
if int(target * target) != all {
return false
}
n := len(nums)
var dfs func(cur, st int) bool
dfs = func(cur, st int) bool {
if cur == int(target) {
return true
}
if st == n {
return false
}
for i := st; i < n; i ++ {
cur *= nums[i]
if dfs(cur, i + 1) {
return true
}
cur /= nums[i]
}
return false
}
return dfs(1, 0)
}