import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//获取所有的密码内容
List<String> passwordList = new ArrayList<>();
while (scanner.hasNextLine()) {
String input = scanner.nextLine();
if (input.equals("")) {
break;
}
passwordList.add(input);
}
//判断密码是否合格
for (int i = 0; i < passwordList.size(); i++) {
if (isPasswordValid(passwordList.get(i))) {
System.out.println("OK");
} else {
System.out.println("NG");
};
}
}
public static boolean isPasswordValid(String password) {
// 检查长度不超过8位
if (password == null || password.length() == 0 || password.length() < 8) {
return false;
}
// 检查必须包含至少三种字符类型
if (!containsAtLeastThreeTypes(password)) {
return false;
}
// 检查不能有长度大于2的重复子串(不重叠)
if (hasRepeatedSubstring(password)) {
return false;
}
return true;
}
private static boolean containsAtLeastThreeTypes(String password) {
int typeCount = 0;
// 检查大写字母
if (!password.equals(password.toLowerCase())) {
typeCount++;
}
// 检查小写字母
if (!password.equals(password.toUpperCase())) {
typeCount++;
}
// 检查数字
if (password.matches(".*\\d.*")) {
typeCount++;
}
// 检查特殊字符(非字母数字)
if (password.matches(".*[^a-zA-Z0-9].*")) {
typeCount++;
}
return typeCount >= 3;
}
private static boolean hasRepeatedSubstring(String password) {
// 检查所有可能长度大于2的子串
for (int len = 3; len <= password.length() / 2; len++) {
for (int i = 0; i <= password.length() - len; i++) {
String substring = password.substring(i, i + len);
// 确保找到的重复子串不重叠
if (password.indexOf(substring, i + len) != -1) {
return true;
}
}
}
return false;
}
}