See the Brooke Thompson page for the full discussion.