#include <stdio.h>
#include<string.h>
#include<malloc.h>
/*
密码要求:

1.长度超过8位

2.包括大小写字母.数字.其它符号,以上四种至少三种

3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
*/

int Judge(char* str) {
    int len = strlen(str); //字符串长度
    int rec[4] = {0}; //标记数组,用 0 1 记录每一种类型字符出现与否的情况!!!!(太实用了)
    int cnt = 0; //记录字符串包含多少种字符(大小写字母,数字,其他符号等)为满足第二种情况
    int num = 0; //第三种 有相同长度超 2 的子串重复的字符串
    //判断字符和数字
    for (int i = 0; i < len; i++) {
        if ((str[i] >= 'A') && (str[i] <= 'Z'))
            rec[0] = 1;    //是大写字母
        else if ((str[i] >= 'a') && (str[i] <= 'z'))
            rec[1] = 1;    //小写字母
        else if ((str[i] >= '0') && (str[i] <= '9'))
            rec[2] = 1;    //数字
        else
            rec[3] = 1;     //其他字符
    }
    //计算字符串包含的字符种类总数
    cnt = rec[0] + rec[1] + rec[2] + rec[3]; //一共四种,至少要三种

    //判断字符串是否包含长度超 2 的两个以上相同子串,故考虑长度为 3 的子字符串是否有重复即可,
    //从而子字符串有(len - 2)种可能,但作为基准子字符串的只需要(len - 3)个即可
    for (int i = 0; i <= len - 6; i++) {
        //因为最后一个子字符串被反复判断的次数最多,并且在它之后没有可以比较的子字符串了,所以 i <= len - 6,即最后一个基准子字符串是倒数第二个子字符串
        for (int j = i + 3; j <= len - 3; j ++) {
            if ((str[i] == str[j]) && (str[i + 1] == str[j + 1]) &&
                    (str[i + 2] == str[j + 2])) {
                num++;
            }

            if (num != 0) {
                break;
            }

        }
        if (num != 0) {
            break;
        }

    }
    //验证密码
    if ((len >= 9) && (cnt >= 3) && (num == 0)) {

        return 1;
    }

    else if (len <= 8 || (cnt <= 2) || (num >= 1)) {
        return 0;
    }
    return 0;
}


int main() {
    char* str = (char*)malloc(100 * sizeof(char));
    while (scanf("%s", str) != EOF) {
        if (Judge(str) == 1)
            printf("OK\n");
        if (Judge(str) == 0)
            printf("NG\n");
    }
    return 0;
    free(str);

}