← Home
package main

import (
	"bufio"
	"bytes"
	"os"
)

type FastScanner struct {
	r *bufio.Reader
}

func NewFastScanner() *FastScanner {
	return &FastScanner{r: bufio.NewReaderSize(os.Stdin, 1<<20)}
}

func (fs *FastScanner) next() string {
	var b []byte
	for {
		c, err := fs.r.ReadByte()
		if err != nil {
			break
		}
		if c > ' ' {
			b = append(b, c)
			break
		}
	}
	for {
		c, err := fs.r.ReadByte()
		if err != nil || c <= ' ' {
			break
		}
		b = append(b, c)
	}
	return string(b)
}

func atoi(s string) int {
	n := 0
	sign := 1
	i := 0
	if len(s) > 0 && s[0] == '-' {
		sign = -1
		i = 1
	}
	for ; i < len(s); i++ {
		n = n*10 + int(s[i]-'0')
	}
	return n * sign
}

func main() {
	in := NewFastScanner()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	t := atoi(in.next())
	var buf bytes.Buffer

	for ; t > 0; t-- {
		n := atoi(in.next())
		s := in.next()

		ones := make([]int, n)
		for i := 1; i <= n-1; i++ {
			ones[i] = ones[i-1]
			if s[i-1] == '1' {
				ones[i]++
			}
		}

		for x := 2; x <= n; x++ {
			i := x - 1
			if s[i-1] == '0' {
				// answer = ones in first i chars + 1
				buf.WriteString(intToString(ones[i] + 1))
			} else {
				// answer = zeros in first i chars + 1 = (i - ones[i]) + 1
				buf.WriteString(intToString((i-ones[i])+1))
			}
			if x < n {
				buf.WriteByte(' ')
			}
		}
		buf.WriteByte('\n')
	}

	out.Write(buf.Bytes())
}

func intToString(x int) string {
	if x == 0 {
		return "0"
	}
	var b [20]byte
	i := len(b)
	n := x
	for n > 0 {
		i--
		b[i] = byte('0' + n%10)
		n /= 10
	}
	return string(b[i:])
}