#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

long swamp_jd( long year)
{
   if( !year)           /* we know year >= 0 */
      return( -1);
   return( year * 365L + (year - 1) * 683L / 2820L);
}

static const char *month_names[15] = {
      "Alligator",  "Bog",  "Crayfish", "Damp",  "Eel",  "Fen",
      "Gumbo",  "Hurricane", "Inundation", "Jaguar",  "Kudzu",
      "Lake",  "Marsh",  "Newt", "Overflow" };

int unpack_date( const char *date, int *day, int *month, long *year)
{
   int i;

   for( i = 0; isdigit( date[i]); i++)
      ;
   if( !i || date[i] != '-')
      return( -1);
   *day = atoi( date);
   date += i + 1;
   *month = tolower( *date) - 'a';
   if( *month < 0 || *month > 14)
      return( -2);
   for( i = 1; date[i] && tolower( date[i]) == month_names[*month][i]; i++)
      ;
   if( date[i] != '-')
      return( -3);
   date += i + 1;
   for( i = 0; isdigit( date[i]); i++)
      ;
   if( !i || date[i])
      return( -4);
   *year = atol( date);
   return( 0);          /* date is valid (in format,  anyway)     */
}

long get_swamp_jd( const char *date)
{
   int day, month, i;
   long year, jd0, rval = -99;         /* start by assuming an error */

   if( !unpack_date( date, &day, &month, &year))
      {
      jd0 = swamp_jd( year);
      switch( month)
         {
         case 13:          /* Newt */
            rval = jd0 + 13 * 28;
            break;
         case 14:          /* Overflow */
            if( (683L * year % 2820L) < 683L)      /* it's a leap year */
               if( day == (int)( (jd0 - year * 365L + 1L) % 683L) )
                   rval = jd0 + 13 * 28 + 1;
            break;
         default:     /* months 0...12:  Alligator... Marsh */
#ifdef CHINESE_REMAINDER_THEOREM_SOLUTION
            rval = jd0 + ((month * 196 + day * 169) % 364);
#else
            for( i = 0; i < 13 * 28; i++)
               if( i % 28 == day && i % 13 == month)
                  rval = jd0 + i;
#endif
            break;
         }
      }
   return( rval);
}

void main( int argc, char **argv)
{
   long jd1, jd2;

   jd1 = get_swamp_jd( argv[1]);
   jd2 = get_swamp_jd( argv[2]);
   if( jd1 > -99L && jd2 > -99L)
      printf( "%ld", jd2 - jd1);
    else
      printf( "eh?\n");
}
