

고려해야 할 조건들
(X가 먼저 수를 두고, 서로 번갈아 둔다.)
종료 조건: 3칸 잇는 순간 종료, 게임판이 가득차도 종료.
1) X, O가 동시에 우승하는 경우 -> invalid
2) X 우승 시 -> 무조건 X 개수가 O 개수보다 1개 더 많아야 함 -> valid
3) O 우승 시 -> 무조건 X 개수와 O 개수가 동일해야 함 -> valid
4) 한 줄도 완성된 게 없어도, 게임판이 꽉 찼다면 -> 무조건 X 개수가 O 개수보다 1개 더 많아야 함 -> valid
line = list(input())
while line[0] != "e":
find_cnt = 0
x_cnt = line.count("X")
o_cnt = line.count("O")
x_win = False
o_win = False
# 가로 3줄 확인
for i in range(0, 7, 3):
start = line[i]
if start == ".":
continue
for j in range(i, i + 3):
if line[j] != start:
break
else:
find_cnt += 1
if start == "X":
x_win = True
else:
o_win = True
# 세로 3줄 확인
for i in range(0, 3):
start = line[i]
if start == ".":
continue
for j in range(i, i + 7, 3):
if line[j] != start:
break
else:
find_cnt += 1
if start == "X":
x_win = True
else:
o_win = True
# 대각선 확인(왼 -> 오)
start = line[0]
for i in range(4, 9, 4):
if start == ".":
break
if line[i] != start:
break
else:
find_cnt += 1
if start == "X":
x_win = True
else:
o_win = True
# 대각선 확인(오 -> 왼)
start = line[2]
for i in range(4, 7, 2):
if start == ".":
break
if line[i] != start:
break
else:
find_cnt += 1
if start == "X":
x_win = True
else:
o_win = True
# 누적 카운트 체크
if find_cnt >= 1: # 한 줄 이상 완성 시
if x_win and o_win: # 둘 다 동시에 승리 불가능
print("invalid")
elif x_win and x_cnt - o_cnt == 1: # x 승리 시 1 차이나야 정상
print("valid")
elif o_win and x_cnt - o_cnt == 0: # o 승리 시 0 차이나야 정상
print("valid")
else:
print("invalid")
else: # 한 줄도 완성 안된 경우
# 게임판이 가득 찬 경우
if (
"." not in line and x_cnt - o_cnt == 1
): # 아무도 이긴 사람이 없는 경우, x가 하나 더 많아야 정상
print("valid")
else:
print("invalid")
line = list(input())