package main
import (
"bufio"
"fmt"
"os"
)
func opposite(c byte) byte {
if c == '0' {
return '1'
}
return '0'
}
func main() {
in := bufio.NewReader(os.Stdin)
var n, p int
var s string
fmt.Fscan(in, &n, &p, &s)
b := []byte(s)
found := false
for i := 0; i+p < n; i++ {
if b[i] == '.' && b[i+p] == '.' {
b[i] = '0'
b[i+p] = '1'
found = true
break
}
if b[i] == '.' && b[i+p] != '.' {
b[i] = opposite(b[i+p])
found = true
break
}
if b[i] != '.' && b[i+p] == '.' {
b[i+p] = opposite(b[i])
found = true
break
}
if b[i] != b[i+p] {
found = true
break
}
}
if !found {
fmt.Print("No")
return
}
for i := 0; i < n; i++ {
if b[i] == '.' {
b[i] = '0'
}
}
fmt.Print(string(b))
}