-- https://github.com/minoki/my-atcoder-solutions
import Data.Char (isSpace)
import Data.List (unfoldr)
import Control.Monad
import qualified Data.Vector.Unboxed as U
import qualified Data.Vector.Unboxed.Mutable as UM
import qualified Data.ByteString.Char8 as BS

main = do
  [n,m] <- unfoldr (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine
  s <- BS.getLine
  let v1 :: U.Vector Int
      v1 = U.create $ do
        v <- UM.replicate (n+1) (10^6)
        UM.write v 0 0
        forM_ [1..n] $ \i -> do
          when (BS.index s i == '0') $ do
            x <- minimum . (10^6 :) <$> (forM [max 0 (i-m)..i-1] $ \j -> (+1) <$> UM.read v j)
            UM.write v i x
        return v
      v2 :: U.Vector Bool
      v2 = U.create $ do
        v <- UM.replicate (n+1) False
        UM.write v n True
        forM_ [n-1,n-2..0] $ \i -> do
          when (BS.index s i == '0') $ do
            reachable <- or <$> (forM [i+1..min (i+m) n] $ \j -> do
                                    (v1 U.! i + 1 == v1 U.! j &&) <$> UM.read v j
                                )
            UM.write v i reachable
        return v
      go w | U.null w = []
           | otherwise = case U.head w of
                           (i,True) -> let (t,w') = U.span (\(x,y) -> not y || x == i) w
                                       in U.length t : go w'
  if U.last v1 > 10^5 then
    print (-1)
  else do
    putStrLn $ unwords $ map show $ init $ go (U.zip v1 v2)
