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

using namespace std;


struct edge{
	int to;
	int num;
};

vector<edge> G[1000];
bool used[100000];
int size;
bool ok;

void dfs(int s,int cnt){
	if(ok)
		return;
	else if(cnt==size&&s==2){
		ok=true;
		return;
	}
	// ツ深ツつウツ優ツ静ヲツづ探ツ催オ
	for(int i = 0; i < G[s].size(); i++){
		if(!used[G[s][i].num]){
			used[G[s][i].num]=true;
			dfs(G[s][i].to,cnt+1);
			used[G[s][i].num]=false;
		}
		if(ok)
			return;
	}
}

int main(){

	while(1){
		int from,to;
		size=0;
		ok=false;
		fill(used,used+100000,false);
		for(int i = 0; i < 1000; i++)
			G[i].clear();

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

	return 0;
}