- # Autor - https://pt.stackoverflow.com/users/132 
- def solucao_triangular_inferior(lista_1, lista_2): 
-     # Descobre a altura e a largura e verifica se as listas tem o tamanho certo. 
-     altura = len(lista_2) 
-     largura = altura + 1 
-     if altura * (altura + 1) / 2 != len(lista_1): 
-         raise IndexError("A segunda lista não tem a quantidade correta de termos.") 
-   
-     # Constrói a matriz a partir das listas. A última coluna serão os valores de lista_2. 
-     matriz = [] 
-     n = 0 
-     for i in range(0, altura): 
-         linha = [] 
-         for j in range(0, i + 1): 
-             linha.append(lista_1[n]) 
-             n += 1 
-         for j in range(i + 1, altura): 
-             linha.append(0) 
-         matriz.append(linha) 
-         linha.append(lista_2[i]) 
-   
-     # Cria uma segunda matriz como cópia da primeira, pois a primeira será destruída como parte do processo de eliminação de Gauss. 
-     copia = [] 
-     for linha in matriz: 
-         copia.append(linha[:]) 
-   
-     # Verifica se não há nenhum zero na diagonal principal. 
-     for i in range(0, altura): 
-         if matriz[i][i] == 0: 
-             raise IndexError("Zero na coluna principal.") 
-   
-     # Zera os coeficientes fora da diagonal principal. 
-     for i in range(0, altura): 
-         # Reduz o coeficiente da diagonal principal para 1 e todos os outros da mesma linha na mesma proporção. 
-         valor = 1 / matriz[i][i] 
-         for coluna in range(0, largura): 
-             matriz[i][coluna] *= valor 
-   
-         # Corrige as demais linhas abaixo. 
-         for j in range(i + 1, altura): 
-             # Conceitualmente, o certo seria percorrer todas as colunas da linha j. 
-             # No entanto, todas as colunas diferentes da coluna i e da última teriam seus valores inalterados, 
-             # e portanto só precisamos mexer nessas duas colunas. 
-             matriz[j][-1] -= matriz[i][-1] * matriz[j][i] 
-             matriz[j][i] = 0 
-   
-     # Monta o resultado final. 
-     ret = [] 
-     for i in range(0, altura): 
-         ret.append(matriz[i][-1]) 
-   
-     # Retorna a matriz original e o resultado. 
-     return copia, ret 
-   
- def mostra_matriz(matriz): 
-     altura = len(matriz) 
-     largura = len(matriz[0]) 
-     t = "" 
-     for i in range(0, altura): 
-         for j in range(0, largura): 
-             v = matriz[i][j] 
-             if j == largura - 1: 
-                 t += f" = {v: >6.2f}" 
-             else: 
-                 if j != 0: t += " " 
-                 if v == 0: 
-                     t += " " * (12 + len(str(j + 1))) 
-                 else: 
-                     s = "+" if v > 0 else "-" 
-                     t += f"{s} {abs(v): >6.2f} * x{j + 1}" 
-         t += "\n" 
-     return t 
-   
- def mostra_vetor(vetor): 
-     aux = "" 
-     for i in range(0, len(vetor)): 
-         aux += f"{vetor[i]} * x{i + 1}\n" 
-     return aux 
-   
- matriz, resultado = solucao_triangular_inferior([-13, 13, 3, -5, -1, -1, 3, 0, 1, 1], [-13, 13, -7, 4]) 
- print(mostra_matriz(matriz)) 
- print(mostra_vetor(resultado)) 
				IyBBdXRvciAtIGh0dHBzOi8vcHQuc3RhY2tvdmVyZmxvdy5jb20vdXNlcnMvMTMyCmRlZiBzb2x1Y2FvX3RyaWFuZ3VsYXJfaW5mZXJpb3IobGlzdGFfMSwgbGlzdGFfMik6CiAgICAjIERlc2NvYnJlIGEgYWx0dXJhIGUgYSBsYXJndXJhIGUgdmVyaWZpY2Egc2UgYXMgbGlzdGFzIHRlbSBvIHRhbWFuaG8gY2VydG8uCiAgICBhbHR1cmEgPSBsZW4obGlzdGFfMikKICAgIGxhcmd1cmEgPSBhbHR1cmEgKyAxCiAgICBpZiBhbHR1cmEgKiAoYWx0dXJhICsgMSkgLyAyICE9IGxlbihsaXN0YV8xKToKICAgICAgICByYWlzZSBJbmRleEVycm9yKCJBIHNlZ3VuZGEgbGlzdGEgbsOjbyB0ZW0gYSBxdWFudGlkYWRlIGNvcnJldGEgZGUgdGVybW9zLiIpCgogICAgIyBDb25zdHLDs2kgYSBtYXRyaXogYSBwYXJ0aXIgZGFzIGxpc3Rhcy4gQSDDumx0aW1hIGNvbHVuYSBzZXLDo28gb3MgdmFsb3JlcyBkZSBsaXN0YV8yLgogICAgbWF0cml6ID0gW10KICAgIG4gPSAwCiAgICBmb3IgaSBpbiByYW5nZSgwLCBhbHR1cmEpOgogICAgICAgIGxpbmhhID0gW10KICAgICAgICBmb3IgaiBpbiByYW5nZSgwLCBpICsgMSk6CiAgICAgICAgICAgIGxpbmhhLmFwcGVuZChsaXN0YV8xW25dKQogICAgICAgICAgICBuICs9IDEKICAgICAgICBmb3IgaiBpbiByYW5nZShpICsgMSwgYWx0dXJhKToKICAgICAgICAgICAgbGluaGEuYXBwZW5kKDApCiAgICAgICAgbWF0cml6LmFwcGVuZChsaW5oYSkKICAgICAgICBsaW5oYS5hcHBlbmQobGlzdGFfMltpXSkKCiAgICAjIENyaWEgdW1hIHNlZ3VuZGEgbWF0cml6IGNvbW8gY8OzcGlhIGRhIHByaW1laXJhLCBwb2lzIGEgcHJpbWVpcmEgc2Vyw6EgZGVzdHJ1w61kYSBjb21vIHBhcnRlIGRvIHByb2Nlc3NvIGRlIGVsaW1pbmHDp8OjbyBkZSBHYXVzcy4KICAgIGNvcGlhID0gW10KICAgIGZvciBsaW5oYSBpbiBtYXRyaXo6CiAgICAgICAgY29waWEuYXBwZW5kKGxpbmhhWzpdKQoKICAgICMgVmVyaWZpY2Egc2UgbsOjbyBow6EgbmVuaHVtIHplcm8gbmEgZGlhZ29uYWwgcHJpbmNpcGFsLgogICAgZm9yIGkgaW4gcmFuZ2UoMCwgYWx0dXJhKToKICAgICAgICBpZiBtYXRyaXpbaV1baV0gPT0gMDoKICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigiWmVybyBuYSBjb2x1bmEgcHJpbmNpcGFsLiIpCgogICAgIyBaZXJhIG9zIGNvZWZpY2llbnRlcyBmb3JhIGRhIGRpYWdvbmFsIHByaW5jaXBhbC4KICAgIGZvciBpIGluIHJhbmdlKDAsIGFsdHVyYSk6CiAgICAgICAgIyBSZWR1eiBvIGNvZWZpY2llbnRlIGRhIGRpYWdvbmFsIHByaW5jaXBhbCBwYXJhIDEgZSB0b2RvcyBvcyBvdXRyb3MgZGEgbWVzbWEgbGluaGEgbmEgbWVzbWEgcHJvcG9yw6fDo28uCiAgICAgICAgdmFsb3IgPSAxIC8gbWF0cml6W2ldW2ldCiAgICAgICAgZm9yIGNvbHVuYSBpbiByYW5nZSgwLCBsYXJndXJhKToKICAgICAgICAgICAgbWF0cml6W2ldW2NvbHVuYV0gKj0gdmFsb3IKCiAgICAgICAgIyBDb3JyaWdlIGFzIGRlbWFpcyBsaW5oYXMgYWJhaXhvLgogICAgICAgIGZvciBqIGluIHJhbmdlKGkgKyAxLCBhbHR1cmEpOgogICAgICAgICAgICAjIENvbmNlaXR1YWxtZW50ZSwgbyBjZXJ0byBzZXJpYSBwZXJjb3JyZXIgdG9kYXMgYXMgY29sdW5hcyBkYSBsaW5oYSBqLgogICAgICAgICAgICAjIE5vIGVudGFudG8sIHRvZGFzIGFzIGNvbHVuYXMgZGlmZXJlbnRlcyBkYSBjb2x1bmEgaSBlIGRhIMO6bHRpbWEgdGVyaWFtIHNldXMgdmFsb3JlcyBpbmFsdGVyYWRvcywKICAgICAgICAgICAgIyBlIHBvcnRhbnRvIHPDsyBwcmVjaXNhbW9zIG1leGVyIG5lc3NhcyBkdWFzIGNvbHVuYXMuCiAgICAgICAgICAgIG1hdHJpeltqXVstMV0gLT0gbWF0cml6W2ldWy0xXSAqIG1hdHJpeltqXVtpXQogICAgICAgICAgICBtYXRyaXpbal1baV0gPSAwCgogICAgIyBNb250YSBvIHJlc3VsdGFkbyBmaW5hbC4KICAgIHJldCA9IFtdCiAgICBmb3IgaSBpbiByYW5nZSgwLCBhbHR1cmEpOgogICAgICAgIHJldC5hcHBlbmQobWF0cml6W2ldWy0xXSkKCiAgICAjIFJldG9ybmEgYSBtYXRyaXogb3JpZ2luYWwgZSBvIHJlc3VsdGFkby4KICAgIHJldHVybiBjb3BpYSwgcmV0CgpkZWYgbW9zdHJhX21hdHJpeihtYXRyaXopOgogICAgYWx0dXJhID0gbGVuKG1hdHJpeikKICAgIGxhcmd1cmEgPSBsZW4obWF0cml6WzBdKQogICAgdCA9ICIiCiAgICBmb3IgaSBpbiByYW5nZSgwLCBhbHR1cmEpOgogICAgICAgIGZvciBqIGluIHJhbmdlKDAsIGxhcmd1cmEpOgogICAgICAgICAgICB2ID0gbWF0cml6W2ldW2pdCiAgICAgICAgICAgIGlmIGogPT0gbGFyZ3VyYSAtIDE6CiAgICAgICAgICAgICAgICB0ICs9IGYiID0ge3Y6ID42LjJmfSIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGlmIGogIT0gMDogdCArPSAiICIKICAgICAgICAgICAgICAgIGlmIHYgPT0gMDoKICAgICAgICAgICAgICAgICAgICB0ICs9ICIgIiAqICgxMiArIGxlbihzdHIoaiArIDEpKSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcyA9ICIrIiBpZiB2ID4gMCBlbHNlICItIgogICAgICAgICAgICAgICAgICAgIHQgKz0gZiJ7c30ge2Ficyh2KTogPjYuMmZ9ICogeHtqICsgMX0iCiAgICAgICAgdCArPSAiXG4iCiAgICByZXR1cm4gdAoKZGVmIG1vc3RyYV92ZXRvcih2ZXRvcik6CiAgICBhdXggPSAiIgogICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHZldG9yKSk6CiAgICAgICAgYXV4ICs9IGYie3ZldG9yW2ldfSAqIHh7aSArIDF9XG4iCiAgICByZXR1cm4gYXV4CgptYXRyaXosIHJlc3VsdGFkbyA9IHNvbHVjYW9fdHJpYW5ndWxhcl9pbmZlcmlvcihbLTEzLCAxMywgMywgLTUsIC0xLCAtMSwgMywgMCwgMSwgMV0sIFstMTMsIDEzLCAtNywgNF0pCnByaW50KG1vc3RyYV9tYXRyaXoobWF0cml6KSkKcHJpbnQobW9zdHJhX3ZldG9yKHJlc3VsdGFkbykp