The Protein Folding Problem and Its Solutions