package main
import (
"fmt"
"strings"
)
func CheckPwdCondition1(pwd string) bool {
return len(pwd) > 8
}
func CheckPwdCondition2(pwd string) bool {
containBig := false
containSmall := false
containSpecail := false
containNum := false
for _, b := range []byte(pwd) {
switch {
case b == ' ' || b == '\n':
return false
case b >= 'A' && b <= 'Z':
containBig = true
case b >= 'a' && b <= 'z':
containSmall = true
case b >= '0' && b <= '9':
containNum = true
default:
containSpecail = true
}
}
trueCount := 0
if containBig {
trueCount++
}
if containSmall {
trueCount++
}
if containSpecail {
trueCount++
}
if containNum {
trueCount++
}
return trueCount >= 3
}
func CheckPwdCondition3(pwd string) bool {
for i := 0; i < len(pwd); i++ {
for l := 3; l < len(pwd)/2; l++ {
if i+l > len(pwd)-1 {
break
}
sub := pwd[i : i+l]
lastStr := pwd[i+l:]
if strings.Contains(lastStr, sub) {
return false
}
}
}
return true
}
func main() {
for {
var input string
fmt.Scan(&input)
if len(input) == 0 {
break
}
if !CheckPwdCondition1(input) {
fmt.Println("NG")
continue
}
if !CheckPwdCondition2(input) {
fmt.Println("NG")
continue
}
if !CheckPwdCondition3(input) {
fmt.Println("NG")
continue
}
fmt.Println("OK")
}
}