The bilinear programming problem