← Home
```go
package main

import (
	"bufio"
	"bytes"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Buffer(make([]byte, 1024*1024), 1024*1024*10)
	scanner.Split(bufio.ScanWords)

	scanInt := func() int {
		scanner.Scan()
		res, _ := strconv.Atoi(scanner.Text())
		return res
	}

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())
	m := scanInt()
	k := scanInt()

	dp := make([]int, n+1)
	for i := 1; i <= n; i++ {
		dp[i] = 1000000000
	}
	dp[k] = 0

	for i := 0; i < m; i++ {
		x := scanInt()
		y := scanInt()
		valX := dp[y]
		if dp[x]+1 < valX {
			valX = dp[x] + 1
		}
		valY := dp[x]
		if dp[y]+1 < valY {
			valY = dp[y] + 1
		}
		dp[x] = valX
		dp[y] = valY
	}

	var out bytes.Buffer
	for i := 1; i <= n; i++ {
		if dp[i] > m {
			out.WriteString("-1 ")
		} else {
			out.WriteString(strconv.Itoa(dp[i]) + " ")
		}
	}
	fmt.Println(out.String())
}
```