package main // 解説読んだ import . "fmt" import . "os" import bf "bufio" func main() { rd := bf.NewReader(Stdin) wr := bf.NewWriter(Stdout) defer wr.Flush() nums := make([]int, 0, 30240) for i := 0; i < 1e5; i++ { ccc := make([]int, 10) for k, t := 0, i; k < 5; k++ { ccc[t%10]++ if ccc[t%10] > 1 { ccc[0] = -1 break } t /= 10 } if ccc[0] < 0 { continue } nums = append(nums, i) } tnums := make([]int, len(nums)) for len(nums) > 0 { n := nums[0] nums = nums[1:] Fprintf(wr, "%05d\n", n) wr.Flush() fin := false mm := make([]int, 100) for i := 0; i < 30; i++ { var hi, bi int Fscan(rd, &hi, &bi) if i == 0 && hi == 5 { fin = true } mm[hi * 10 + bi]++ } if fin { return } tnums = tnums[:0] for _, t := range nums { h, b := hitAndBlow(n, t) if mm[h*10+b] > 0 { tnums = append(tnums, t) } } nums, tnums = tnums, nums } } func hitAndBlow(x, y int) (h, b int) { for i := 0; i < 5; i++ { for j, ty := 0, y; j < 5; j++ { if x % 10 == ty % 10 { if i == j { h++ } else { b++ } } ty /= 10 } x /= 10 } return }