package main import ( "bufio" "fmt" "io" "os" "strconv" "strings" ) func main() { sc := NewScanner(os.Stdin) var line string line, _ = sc.NextLine() threshold := splitVersion(line) line, _ = sc.NextLine() target := splitVersion(line) for i := 0; i < len(target); i++ { switch { case target[i] > threshold[i]: fmt.Println("NO") return case target[i] < threshold[i]: fmt.Println("YES") return } } fmt.Println("YES") } func splitVersion(version string) []int { tokens := strings.Split(version, ".") len := len(tokens) splits := make([]int, len) for i := 0; i < len; i++ { var err error splits[i], err = strconv.Atoi(tokens[i]) if err != nil { panic(err) } } return splits } type Scanner struct { *bufio.Scanner } func NewScanner(r io.Reader) *Scanner { return &Scanner{ bufio.NewScanner(r), } } func (s *Scanner) NextLine() (string, error) { s.Scanner.Split(bufio.ScanLines) return s.nextToken() } func (s *Scanner) nextToken() (string, error) { sc := s.Scanner if sc.Scan() { return sc.Text(), nil } if sc.Err() != nil { return "", sc.Err() } return "", io.EOF }