Identifying Hierarchical Structure in Sequences: A linear-time algorithm