#!/usr/bin/env python3 N = int(input()) def read_equation(): line = input().replace(" ", "") left, right = line.split("=") coeff = {} i = 0 while i < len(left): j = i # Protože `-X` a `+(-X)` jsou totéž, můžeme předstírat, že jsou všude implicitní znaménka `+` # A pak při čtení čísla nás zajímá, pouze jestli je tam znaménko `-`` nebo ne if left[j] == "+": j += 1 while left[j].isdigit() or left[j] == "-": j += 1 # Teď je `left[j]` písmeno, které je proměnnou # a `left[i:j]` je číselný koeficient. coeff[left[j]] = int(left[i:j]) i = j + 1 return coeff, int(right) for t in range(N): equations = [] for _ in range(3): equations.append(read_equation()) variables = sorted(equations[0][0].keys()) matrix = [] for coeffs, rhs in equations: row = [coeffs[v] for v in variables] row.append(rhs) matrix.append(row) for col in range(3): # Pokud je další prvek na diagonále nulový, vyměň řádky s nějakým, který nemá # Máme zaručeno, že existuje řešení, takže alespoň jeden z následujících řádků bude nenulový if matrix[col][col] == 0: for r in range(col + 1, 3): if matrix[r][col] != 0: matrix[col], matrix[r] = matrix[r], matrix[col] break # Vynulujeme všechny prvky ve sloupci `col` pod diagonálou. # Místo dělení oba řádky vhodně vynásobíme, takže všechny # mezivýsledky zůstanou celá čísla. for r in range(col + 1, 3): pivot = matrix[col][col] factor = matrix[r][col] for c in range(col, 4): matrix[r][c] = matrix[r][c] * pivot - matrix[col][c] * factor # Teď máme horní trojúhelníkovou matici, takže můžeme najít hodnoty proměnných zpětnou substitucí # Protože víme, že celá úloha se dá řešit v celých číslech, můžeme použít celočíselné dělení `//` # a tím nemusíme řešit konverze na float a případné nepřesnosti solution = [0 for _ in range(len(variables))] solution[2] = matrix[2][3] // matrix[2][2] solution[1] = ( matrix[1][3] - matrix[1][2] * solution[2] ) // matrix[1][1] solution[0] = ( matrix[0][3] - matrix[0][1] * solution[1] - matrix[0][2] * solution[2] ) // matrix[0][0] print( f"{variables[0]}={solution[0]} " f"{variables[1]}={solution[1]} " f"{variables[2]}={solution[2]}" ) # Přečteme prázdný řádek mezi jednotlivými úlohy if t != N - 1: input()