added gaussian elimination