给你一棵包含 n 个节点的 无向树,节点编号从 0 到 n - 1。该树由长度为 n - 1 的二维整数数组 edges 表示,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。
另外给你两个长度为 n 的 二进制 字符串 start 和 target。对于每个节点 x,start[x] 是其初始颜色,而 target[x] 是其目标颜色。
在一次操作中,你可以选择下标为 i 的一条边并 翻转 它的两个端点。也就是说,如果这条边是 [u, v],那么节点 u 和 v 的颜色 各自 从 '0' 变为 '1',或者从 '1' 变为 '0'。
返回一个边下标数组,执行这些边对应的操作可以将 start 转换为 target。在所有有效序列中找出 长度最短 的序列,以 升序 返回边下标。
如果无法将 start 转换为 target,则返回一个仅包含单个元素 -1 的数组。
示例 1:

输入: n = 3, edges = [[0,1],[1,2]], start = "010", target = "100"
输出: [0]
解释:
翻转下标为 0 的边,这会改变节点 0 和 1 的颜色。
字符串从 "010" 变为 "100",与目标匹配。
示例 2:

输入: n = 7, edges = [[0,1],[1,2],[2,3],[3,4],[3,5],[1,6]], start = "0011000", target = "0010001"
输出: [1,2,5]
解释:
执行这些操作后,结果字符串变为 "0010001",与目标匹配。
示例 3:

输入: n = 2, edges = [[0,1]], start = "00", target = "01"
输出: [-1]
解释:
不存在可以将 "00" 转换为 "01" 的边翻转序列。因此,我们返回 [-1]。
提示:
2 <= n == start.length == target.length <= 105edges.length == n - 1edges[i] = [ai, bi]0 <= ai, bi < nstart[i] 是 '0' 或 '1'。target[i] 是 '0' 或 '1'。edges 构成一棵有效的树。