Gaussian elimination with partial pivoting