← Home
package main

import (
	"fmt"
)

type Guess struct {
	num   string
	bulls int
	cows  int
}

func main() {
	var n int
	if _, err := fmt.Scan(&n); err != nil {
		return
	}

	guesses := make([]Guess, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&guesses[i].num, &guesses[i].bulls, &guesses[i].cows)
	}

	var match string
	count := 0

	for d1 := 0; d1 <= 9; d1++ {
		for d2 := 0; d2 <= 9; d2++ {
			if d2 == d1 {
				continue
			}
			for d3 := 0; d3 <= 9; d3++ {
				if d3 == d1 || d3 == d2 {
					continue
				}
				for d4 := 0; d4 <= 9; d4++ {
					if d4 == d1 || d4 == d2 || d4 == d3 {
						continue
					}
					cand := fmt.Sprintf("%d%d%d%d", d1, d2, d3, d4)
					ok := true
					for _, g := range guesses {
						b := 0
						c := 0
						for i := 0; i < 4; i++ {
							if cand[i] == g.num[i] {
								b++
							} else {
								for j := 0; j < 4; j++ {
									if cand[i] == g.num[j] {
										c++
									}
								}
							}
						}
						if b != g.bulls || c != g.cows {
							ok = false
							break
						}
					}
					if ok {
						match = cand
						count++
					}
				}
			}
		}
	}

	if count == 0 {
		fmt.Println("Incorrect data")
	} else if count == 1 {
		fmt.Println(match)
	} else {
		fmt.Println("Need more data")
	}
}