```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var t int
if _, err := fmt.Fscan(in, &t); err != nil {
return
}
for ; t > 0; t-- {
var n, k int
fmt.Fscan(in, &n, &k)
var s string
fmt.Fscan(in, &s)
c0, c1 := 0, 0
for _, ch := range s {
if ch == '0' {
c0++
} else if ch == '1' {
c1++
}
}
c2 := k - c0 - c1
m := n - k
ans := make([]byte, n)
if m == 0 {
for i := 0; i < n; i++ {
ans[i] = '-'
}
fmt.Fprintln(out, string(ans))
continue
}
Lmin := 1 + c0
Lmax := 1 + c0 + c2
U1 := Lmin
U2 := Lmax + m - 1
I1 := Lmax
I2 := Lmin + m - 1
for i := 1; i <= n; i++ {
if i < U1 || i > U2 {
ans[i-1] = '-'
} else if i >= I1 && i <= I2 {
ans[i-1] = '+'
} else {
ans[i-1] = '?'
}
}
fmt.Fprintln(out, string(ans))
}
}
```