#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    while (cin>>str) {
        if (str.length()<8)
        {
            cout<<"NG\n";
            str.clear();
            continue;
        }

        int flag = 0, count = 0;
        for (char cc : str) {
            if (cc>='0' && cc<='9') {
                if (!(flag&1)) {
                    flag |= 1;
                    count++;
                }
            }
            else if (cc>='A' && cc<='Z') {
                if (!(flag&2)) {
                    flag |= 2;
                    count++;
                }
            }
            else if (cc>='a' && cc<='z') {
                if (!(flag&4)) {
                    flag |= 4;
                    count++;
                }
            }
            else {
                if (!(flag&8)) {
                    flag |= 8;
                    count++;
                }
            }

            if (count>2) {
                break;
            }
        }

        if (count<3) {
            cout<<"NG\n";
            str.clear();
            continue;
        }

        bool rs = true;
        for (int i=0; i<=(str.length()-6); i++) {
            string tmp(str.substr(i, 3));
            auto index = str.find(tmp, i+3);
            if (index != string::npos) {
                rs = false;
                break;
            }
        }
        if (rs) {
            cout<<"OK\n";
        }
        else {
            cout<<"NG\n";
        }
        str.clear();
    }
}
// 64 位输出请用 printf("%lld")

判定至少包含三种字符:用整型变量flag四个位保存四种类型字符存在的情况,bit为1则表示含有,反正则没有。

判定重复子串:子串最少长度是3,只要长度为3的子串不存在重复,长度大于3的子串必不会重复。