#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct edge{
	int to,cost,num;
};

vector<edge> G[200];
bool used[100000];
int sz;

bool ok;

void dfs(int s,int d){
	if(d==sz){
		ok=true;
		return;
	}
	else if(ok)
		return;
	for(int i = 0; i < G[s].size(); i++){
		edge e = G[s][i];
		if(!used[G[s][i].num]){
			used[G[s][i].num]=true;
			dfs(G[s][i].to,d+1);
			used[G[s][i].num]=false;
		}
	}
}

int main(){
	while(1){
		ok=false;
		fill(used,used+100000,false);
		int from,to;
		sz=0;
		while(cin>>from>>to&&!(from==0&&to==0)){
			edge e;
			e.to=to;
			e.num=sz;
			G[from].push_back(e);
			e.to=from;
			G[to].push_back(e);
			sz++;
		}
		if(cin.eof())
			break;
		dfs(1,0);
		if(ok)
			cout<<"OK"<<endl;
		else
			cout<<"NG"<<endl;

		for(int i = 0; i < 200; i++)
			G[i].clear();
	}
	return 0;
}