국가 간 경기에서 가능한
승패, 무무, 패승중 하나씩을 택해 마지막 라운드까지 진행한다. 이때 승리, 무승부, 패배 카운트에 따라 한 조합만 가능할 수도 있지만 모든 조합이 가능할 수도 있기 때문에 재귀적으로 접근해야 한다.
from itertools import combinations
for _ in range(4):
    nations = [[] for _ in range(6)]
    games = list(map(int, input().split()))
    for i in range(6):
        for j in range(3):
            nations[i].append(games.pop(0))
    # i번 국가는 nations[i], 0, 1, 2는 각각 승리, 무승부, 패배 카운트 기록
    is_possible = []
    cases = list(combinations(range(6), 2))
    # 6개 국가별 경기 조합
    def backtracking(turn_num):
        if turn_num == len(cases):
            # 특정 경기에서 (승패, 무무, 패승) 중 한 가능성을 택한 뒤 이를 따라왔을 때 마지막 라운드
            possible = 1
            for i in range(6):
                for j in range(3):
                    if nations[i][j] != 0:
                        possible = 0
                        break
                        # 마지막 라운드까지 마쳤을 때 모든 카운트는 0이어야 정상적인 경기
            is_possible.append(possible)
            return
        n1, n2 = cases[turn_num]
        for x, y in ((0, 2), (1, 1), (2, 0)):
            if nations[n1][x] > 0 and nations[n2][y] > 0:
                # 승패, 무무, 패승이 가능할 때 이를 마킹(즉 각각 카운트를 1씩 빼준다)
                nations[n1][x] -= 1
                nations[n2][y] -= 1
                backtracking(turn_num + 1)
                # n1, n2 두 국가 간 경기에서 3가지 케이스가 모두 일어날 수 있기 때문에 복구해준다.
                nations[n1][x] += 1
                nations[n2][y] += 1
    backtracking(0)
    if 1 in is_possible: print(1)
    else: print(0)