Solving the protein folding problem