package com.wy.leetcode;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class IsRightPassword {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String string = scanner.next();
System.out.println(isRight(string));
}
}
private static String isRight(String password) {
if (password.length() <= 8) {
return "NG";
}
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < password.length(); i++) {
String s = password.charAt(i) + "";
checkLetter(map, s);
if (i < password.length() - 3 && hasSameSubstring(password.substring(i, i+3), password.substring(i+3))) {
return "NG";
}
}
if (map.keySet().size() < 3) {
return "NG";
}
return "OK";
}
private static void checkLetter(Map<String, Integer> map, String letter) {
String upperLetterRule = "[A-Z]";
String lowerLetterRule = "[a-z]";
String numRule = "\\d";
String otherLetterRule = "[^A-Za-z0-9_]";
if (!map.containsKey("UPPER") && letter.matches(upperLetterRule)) {
map.put("UPPER", 1);
}
if (!map.containsKey("LOWER") && letter.matches(lowerLetterRule)) {
map.put("LOWER", 1);
}
if (!map.containsKey("NUM") && letter.matches(numRule)) {
map.put("NUM", 1);
}
if (!map.containsKey("OTHER") && letter.matches(otherLetterRule)) {
map.put("OTHER", 1);
}
}
private static boolean hasSameSubstring(String substring, String string) {
for (int i = 0; i < string.length() - 3; i++) {
if (substring.equals(string.substring(i, i+3))) {
return true;
}
}
return false;
}
}
