Problem:


こぶたぬきつねこ

  A子さんの家に親戚のB男君がやってきました。彼は3歳で歌が大好きです。彼は幼稚園でならった「こぶたぬきつねこ」(山本直純作詞・作曲)という歌を一生懸命に歌っています。この歌では、4つのことば「こぶた」  「たぬき」 「きつね」「ねこ」が順にしりとりになっていて、さらに最後の音と最初の音が同じになっています。B男君は、A子さんに、同じようなしりとりが、B男君が言った単語から作れるか教えて欲しいと言われました。

    そこで、A子さんを助けるために、与えられた単語から、その単語をすべて使って、順にしりとりをつくり、その上で、 第1 の単語の最初の文字と最終の単語の最後の文字が同じであるようにできるか否かを判定するプログラムを作成しましょう。

  n 個の単語を入力とし、それらの単語の組からしりとりを作成できるか否かを判定し、可能な場合はOK と、不可能な場合は NG と出力するプログラムを作成してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

n
word1
word2
:
wordn

 1 行目に単語の個数 n (2 ≤ n ≤ 10000) が与えられます。続く n 行に n 個の単語 wordi (32 文字以下の半角英小文字だけからなる文字列) が与えられます。

データセットの数は 50 を超えません。

Output

入力データセットごとに、判定結果を１行に出力します。

Sample Input

5
apple
yellow
georgia
king
email
7
apple
yellow
georgia
king
email
wink
lucky
0

Output for the Sample Input

NG
OK



Sample input:
5
apple
yellow
georgia
king
email
7
apple
yellow
georgia
king
email
wink
lucky
0


Sample output:
NG
OK

Submission status: Runtime Error

Solution code:
def check():
    for i in range(26):
        if inWd[i] != outWd[i]:
            return False
    return True

def dfs(current_node):
    visited[current_node] = True
    for next_node in range(26):
        if not visited[next_node] and L[current_node][next_node]:
            dfs(next_node)

def getNComponent():
    nc = 0
    for i in range(26):
        if inWd[i] == 0 and outWd[i] == 0:
            continue
        if not visited[i]:
            nc += 1
            dfs(i)
    return nc

while True:
    n = input()
    if n == 0:break
    inWd = [0]*26
    outWd = [0]*26
    visited = [False]*26
    L = [[0]*26 for i in range(26)]
    for i in range(n):
        s = raw_input()
        first = ord(s[0])-ord("a")
        last = ord(s[-1])-ord("a")
        inWd[first] += 1
        outWd[last] += 1
        L[first][last] = 1
        L[last][first] = 1
    if check() and getNComponent()==1:
        print "OK"
    else:
        print "NG"

Submission status: Runtime Error

Solution code:
while 1:
    n=input()
    if n==0: break
    ini,end={},{}
    for	i in range(n):
	word=raw_input()
	try:ini[word[0]]+=1
	except:ini[word[0]]=1
	try:end[word[-1]]+=1
	except:end[word[-1]]=1
    for	k,v in ini.items():
	if k not in end or end[k]!=v:
            print "NG"
            break
    else:
	print "OK"

Submission status: Runtime Error

Solution code:
while 1:
    n=input()
    if n==0: break
    ini,end={},{}
    for	i in range(n):
	word=raw_input()
	try:ini[word[0]]+=1
	except:ini[word[0]]=1
	try:end[word[-1]]+=1
	except:end[word[-1]]=1
    for	k,v in ini.items():
		if k not in end or end[k]!=v:
            print "NG"
            break
    else:
		print "OK"

Submission status: Runtime Error

Solution code:
while 1:
	n=input()
	if n==0: break
	ini,end={},{}
	for	i in range(n):
		word=raw_input()
		try:ini[word[0]]+=1
		except:ini[word[0]]=1
		try:end[word[-1]]+=1
		except:end[word[-1]]=1
	for	k,v in ini.items():
		if k not in end or end[k]!=v:
			print "NG"
			break
	else:
		print "OK"

Submission status: Runtime Error

Solution code:
while 1:
	n=input()
	if n==0: break
	ini,end={},{}
	for	i in range(n):
		word=raw_input()
		if word[0]==word[-1]:
			continue
		try:ini[word[0]]+=1
		except:ini[word[0]]=1
		try:end[word[-1]]+=1
		except:end[word[-1]]=1
	for	k,v in ini.items():
		if k not in end or end[k]!=v:
            print "NG"
            break
    else:
		print "OK"

Submission status: Runtime Error

Solution code:
while 1:
	try:
		n=input()
		if n==0: break
		ini,end={},{}
		for	i in range(n):
			word=raw_input()
			if word[0]==word[-1]:
				continue
			try:ini[word[0]]+=1
			except:ini[word[0]]=1
			try:end[word[-1]]+=1
			except:end[word[-1]]=1
		for	k,v in ini.items():
			if k not in end or end[k]!=v:
	            print "NG"
	            break
	    else:
			print "OK"
	except:
		break