<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def proc_monomer(self, monomer_info, parent, mon_cls=False):
 """Processes a records into a `Monomer`. Parameters monomer_info : (set, OrderedDict) Labels and data for a monomer. parent : ampal.Polymer `Polymer` used to assign `ampal_parent` on created `Monomer`. mon_cls : `Monomer class or subclass`, optional A `Monomer` class can be defined explicitly. """

        monomer_labels, monomer_data = monomer_info
        if len(monomer_labels) > 1:
            raise ValueError(
                'Malformed PDB, single monomer id with '
                'multiple labels. {}'.format(monomer_labels))
        else:
            monomer_label = list(monomer_labels)[0]
        if mon_cls:
            monomer_class = mon_cls
            het = True
        elif monomer_label[0] == 'ATOM':
            if monomer_label[2] in standard_amino_acids.values():
                monomer_class = Residue
            else:
                monomer_class = Nucleotide
            het = False
        else:
            raise ValueError('Unknown Monomer type.')
        monomer = monomer_class(
            atoms=None, mol_code=monomer_label[2], monomer_id=monomer_label[1],
            insertion_code=monomer_label[3], is_hetero=het, ampal_parent=parent
        )
        monomer.states = self.gen_states(monomer_data.values(), monomer)
        monomer._active_state = sorted(monomer.states.keys())[0]
        return monomer