Hola:
La línea
asume q vas a recibir una cadena de al menos 4 caracteres, si recibes una cadena de menor longitud (como "aa") entonces te vas a encontrar con este error:
Código LOGFILE:
Ver originalterminate called after throwing an instance of 'std::out_of_range'
what(): basic_string:substr
....
corrige ese problema y prueba de nuevo.
slds;
nup_