#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
int main( void ) {
regex_t reg;
if ( regcomp( & reg, "^(M{0,3})"
"(D?C{0,3}|CM|CD)"
"(L?X{0,3}|XC|XL)"
"(V?I{0,3}|IX|IV)$" , REG_EXTENDED | REG_ICASE) )
char string[ 100 ] ;
while ( fgets ( string
, sizeof string
, stdin
) ) { string[ len] = '\0 ' ; // chomp string
if ( len+ 1 != sizeof string) {
int invalid = ( len == 0 // empty input is invalid
|| regexec( & reg, string, 0 , NULL, 0 ) ) ;
printf ( "'%s' is %svalid\n " , string
, invalid
? "in" : "" ) ; } else {
fputs ( "input is too large\n " , stderr
) ; }
}
regfree( & reg) ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8cmVnZXguaD4KCmludCBtYWluKHZvaWQpIHsKICAgIHJlZ2V4X3QgcmVnOwogICAgaWYgKHJlZ2NvbXAoJnJlZywiXihNezAsM30pIgogICAgICAgICAgICAgICAgICAgICIoRD9DezAsM318Q018Q0QpIgogICAgICAgICAgICAgICAgICAgICIoTD9YezAsM318WEN8WEwpIgogICAgICAgICAgICAgICAgICAgICIoVj9JezAsM318SVh8SVYpJCIsIFJFR19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpCiAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwoKICAgIGNoYXIgc3RyaW5nWzEwMF07CiAgICB3aGlsZSAoZmdldHMoc3RyaW5nLCBzaXplb2Ygc3RyaW5nLCBzdGRpbikpIHsKICAgICAgICBpbnQgbGVuID0gc3RyY3NwbihzdHJpbmcsICJcclxuIik7CiAgICAgICAgc3RyaW5nW2xlbl0gPSAnXDAnOyAvLyBjaG9tcCBzdHJpbmcKICAgICAgICBpZiAobGVuKzEgIT0gc2l6ZW9mIHN0cmluZykgewogICAgICAgICAgICBpbnQgaW52YWxpZCA9IChsZW4gPT0gMCAgLy8gZW1wdHkgaW5wdXQgaXMgaW52YWxpZAogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCByZWdleGVjKCZyZWcsIHN0cmluZywgMCwgTlVMTCwgMCkpOwogICAgICAgICAgICBwcmludGYoIiclcycgaXMgJXN2YWxpZFxuIiwgc3RyaW5nLCBpbnZhbGlkID8gImluIiA6ICIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmcHV0cygiaW5wdXQgaXMgdG9vIGxhcmdlXG4iLCBzdGRlcnIpOwogICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICAgICAgfQogICAgfQogICAgcmVnZnJlZSgmcmVnKTsKICAgIHJldHVybiAhZmVvZihzdGRpbik7Cn0K