stelsel = [
    [ 1, 1, 1, 0, 0, 0, 0, 0,  8 ], 
    [ 0, 0, 0, 1, 1, 0, 0, 0, 11 ], 
    [ 0, 0, 0, 0, 0, 1, 1, 1, 13 ],
    [ 1, 0, 0, 1, 0, 0, 1, 0, 17 ],
    [ 0, 1, 0, 0, 1, 0, 0, 1, 11 ],
    [ 0, 1, 0, 1, 0, 1, 0, 0,  7 ],
    [ 0, 0, 1, 0, 1, 0, 1, 0, 17 ],
    [ 0, 0, 1, 0, 0,-1, 0, 0,  0 ]
]


# pizzaraadsel - resulteert in een deling door 0
stelsel1 = [
    [ 1, 1, 0, 0, 6],
    [ 0, 0, 1, 1, 6],
    [ 0,-1, 0, 1, 1],
    [ 1, 0,-2, 0, 0]
]


# verwissel twee rijen (vergelijkingen) van een stelsel met elkaar
# de rijen staan op posities index_1 en index_2
def verwissel (stelsel, index_1, index_2):
    hulp = stelsel[index_1]
    stelsel[index_1] = stelsel[index_2]
    stelsel[index_2] = hulp

# deel de rij (vergelijking) door het gegeven getal (in-place)
def deel_door (rij, deler):
    for i in range(len(rij)):
        rij[i] /= deler

# trekt rij_2 een aantal keer af van rij_1 (in-place)
def trek_veelvoud_af (rij_1, rij_2, factor):
    for i in range(len(rij_1)):
        rij_1[i] -= rij_2[i] * factor

# zoek een element in kolom k dat niet nul is, en geef het rijnummer terug.
# Zoek enkel in de rijen onder rij k
def niet_nul_element (stelsel, k):
    r = k + 1
    while stelsel[r][k] == 0:
        r += 1
    return r

## de eliminatie
n = len(stelsel)

for k in range (0,n):   # kolomnummer
    # zorg dat er een 1 komt op plaats stelsel[k][k]
    if stelsel[k][k] == 0:
        nieuwe_rij = niet_nul_element(stelsel, k)
        verwissel(stelsel, k, nieuwe_rij)
    deel_door(stelsel[k], stelsel[k][k])
    # reduceer alle rijen, behalve rij k
    for r in range (0,n):
        if r != k:
            trek_veelvoud_af (stelsel[r], stelsel[k], stelsel[r][k])

## het resultaat
for r in range (0,n):
    print (stelsel[r][n+1])

