// a[i][m] = b[i]
void Gauss( int n, int m, double ** a ) {
for ( int i = 0 ; i < n; i++ ) {
// выбрать в i-й строке ненулевой элемент j
// если строка нулевая swap(row[i--], row[--n])
// иначе swap(column[i], column[j]) и обнулить i-й столбец
// обнулять можно ниже i (трапецевидная матрица) можно всё кроме i (диагональная матрица)
}
}
Ly8gYVtpXVttXSA9IGJbaV0Kdm9pZCBHYXVzcyggaW50IG4sIGludCBtLCBkb3VibGUgKiphICkgewogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAvLyDQstGL0LHRgNCw0YLRjCDQsiBpLdC5INGB0YLRgNC+0LrQtSDQvdC10L3Rg9C70LXQstC+0Lkg0Y3Qu9C10LzQtdC90YIgagogICAgLy8g0LXRgdC70Lgg0YHRgtGA0L7QutCwINC90YPQu9C10LLQsNGPIHN3YXAocm93W2ktLV0sIHJvd1stLW5dKQogICAgLy8g0LjQvdCw0YfQtSBzd2FwKGNvbHVtbltpXSwgY29sdW1uW2pdKSDQuCDQvtCx0L3Rg9C70LjRgtGMIGkt0Lkg0YHRgtC+0LvQsdC10YYKICAgIC8vINC+0LHQvdGD0LvRj9GC0Ywg0LzQvtC20L3QviDQvdC40LbQtSBpICjRgtGA0LDQv9C10YbQtdCy0LjQtNC90LDRjyDQvNCw0YLRgNC40YbQsCkg0LzQvtC20L3QviDQstGB0ZEg0LrRgNC+0LzQtSBpICjQtNC40LDQs9C+0L3QsNC70YzQvdCw0Y8g0LzQsNGC0YDQuNGG0LApCiAgfQp9Cg==