import sys
import random

# 定数設定
SETSIZE = 100
CNO = 10
GENMAX = 10000
SEED = 7

# 1. stdin（標準入力）からldata.txtの内容を読み込む
def readdata_from_stdin():
    data = []
    teacher = []
    lines = sys.stdin.read().strip().splitlines()
    for line in lines:
        line = line.strip()
        if not line:
            continue
        vals = [int(c) for c in line.split()]
        data.append(vals[:CNO])
        teacher.append(vals[CNO])
    return data, teacher

# 2. スコア計算関数
def calcscore(data, teacher, answer):
    score = 0
    for i in range(len(data)):
        point = 0
        for j in range(CNO):
            if answer[j] == 2:  # ワイルドカード
                point += 1
            elif answer[j] == data[i][j]:
                point += 1
        
        if point == CNO and teacher[i] == 1:
            score += 1
        elif point != CNO and teacher[i] == 0:
            score += 1
    return score

# データ読み込み
data, teacher = readdata_from_stdin()

# 探索（最良解の獲得）
random.seed(SEED)
bestscore = 0
bestanswer = [0] * CNO

for i in range(GENMAX):
    answer = [random.randint(0, 2) for _ in range(CNO)]
    score = calcscore(data, teacher, answer)
    if score > bestscore:
        bestscore = score
        bestanswer = answer.copy()

# パターンA, B, C, Dの定義
patterns = {
    'パターンA': [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
    'パターンB': bestanswer,
    'パターンC': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    'パターンD': [1, 2, 2, 2, 2, 2, 2, 2, 2, 2]
}

# --- 実行結果（スコア表示） ---
print("=== 実行結果 (各パターンのスコア) ===")
for p_name, p_ans in patterns.items():
    s = calcscore(data, teacher, p_ans)
    print(f"{p_name} {p_ans}: score = {s}")

# --- 表2.2 の出力（テキスト形式） ---
print("\n=== 表2.2 予測結果の比較 (先頭10事例) ===")
header = f"{'事例No':<6} | {'入力属性データ':<30} | {'正解':<4} | {'パタA':<5} | {'パタB':<5} | {'パタC':<5} | {'パタD':<5}"
print(header)
print("-" * len(header))

for i in range(min(10, len(data))):
    row_str = f"{i+1:<7} | {str(data[i]):<30} | {teacher[i]:<6} | "
    preds = []
    for p_name, p_ans in patterns.items():
        point = sum(1 for j in range(CNO) if p_ans[j] == 2 or p_ans[j] == data[i][j])
        pred = 1 if point == CNO else 0
        preds.append(str(pred))
    row_str += " | ".join(f"{p:<5}" for p in preds)
    print(row_str)