Gaussian Elimination with partial pivoting