A bilevel programming algorithm for exact solution of the network design problem with user-optimal flows