pub fn parse(input: &str) -> Vec<Reaction>
To speed things up when processing, we use a temporary map to convert chemical names into contiguous indices.