package main import . "fmt" import . "math/bits" func main() { var n, start,end int Scan(&n,&start,&end) stone := make([]int, n) for i := range stone { Scan(&stone[i]) } current := []int{start} visited := make(map[int]bool) visited[start] = true cnt := 0 for len(current) > 0 { tmp := []int{} for _, v := range current { if OnesCount(uint(v^end)) == 1 { Println(cnt) return } for _, s := range stone { if visited[s] { continue } if OnesCount(uint(v^s)) == 1 { visited[s] = true tmp = append(tmp, s) } } } current = tmp cnt++ } Println(-1) } /* 考察 石を頂点、ハミング距離1を辺としてグラフ作って 頂点startから頂点endまでの最短ルートの端点以外の頂点数が答え */