#include #include #include using namespace std; FILE *fin; FILE *fout; bool chkEmail( char x[], int sp ) { // printf( "ICH %s%d\n", x, sp ); while ( ( (unsigned) sp < strlen( x ) ) && ( ( x[sp] == ' ' ) || ( x[sp] == '\n' ) || ( x[sp] == ',' ) ) ) { sp++; } if ( (unsigned) sp >= strlen( x ) ) return 1; // printf( "CH %s%d\n", x, sp ); bool f; f = 0; while ( ( x[sp] != '@' ) && ( (unsigned) sp < strlen( x ) ) ) { if ( x[sp] != '.' ) { if ( x[sp] < 'a' || x[sp] > 'z' ) return 0; } f = 1; sp++; } if ( f == 0 ) return 0; if ( x[sp] != '@' ) return 0; f = 0; sp++; while ( ( x[sp] != '.' ) && ( (unsigned) sp < strlen( x ) ) ) { if ( x[sp] != '.' ) { // printf( "NONONO %d %c\n", sp, x[sp] ); if ( x[sp] < 'a' || x[sp] > 'z' ) return 0; } f = 1; sp++; } // printf( "END?! %d %d %c\n", f, sp, x[sp] ); if ( f == 0 ) return 0; if ( x[sp] != '.' ) return 0; f = 0; sp++; while ( ( x[sp] != ',' ) && ( (unsigned) sp < strlen( x ) ) ) { if ( x[sp] == ' ' ) break; if ( x[sp] == '\r' ) break; if ( x[sp] == '\n' ) break; if ( x[sp] != '.' ) { // printf( "NONONO %d %c\n", sp, x[sp] ); if ( x[sp] < 'a' || x[sp] > 'z' ) return 0; } f = 1; sp++; } if ( f == 0 ) return 0; // printf( "END?!\n" ); return chkEmail( x, sp ); } char from[1000000]; char to[1000000]; char cc[1000000]; char bcc[1000000]; char atta[1000000]; char subj[1000000]; char body[1000000]; bool es() { int i; for ( i = 8; (unsigned)i < strlen( subj ); i++ ) { if ( ( subj[i] != ' ' ) && ( subj[i] != '\n' ) && ( subj[i] != '\r' ) ) return 0; } return 1; } bool ea() { int i; for ( i = 8; (unsigned)i < strlen( atta ); i++ ) { if ( ( atta[i] != ' ' ) && ( atta[i] != '\n' ) && ( atta[i] != '\r' ) ) return 0; } return 1; } bool eb() { int i; for ( i = 5; (unsigned) i < strlen( body); i++ ) { if ( ( body[i] != ' ' ) && ( body[i] != '\r' ) && ( body[i] != '\n' ) ) { if ( body[i] == '-' ) { if ( (unsigned)i + 5 < strlen( body ) ) return 0; } else return 0; } } return 1; } bool ES( char x ) { if ( ( x == ' ' ) || ( x == '\r' ) || ( x == '\n' ) ) return 1; return 0; } bool lb() { int i; for ( i = 5; (unsigned) i < strlen( body); i++ ) { if ( ES( body[i] ) && ES( body[i-1] ) && ( body[i-1] != '\r' ) ) { if ( ( body[i] == '\r' || body[i] == '\n' ) && (body[i-1] == '\r' || body[i-1] == '\n') ) { if ( ( body[i-2] == '\r' || body[i-2] == '\n' ) && (body[i-3] == '\r' || body[i-3] == '\n') ) if ( ( body[i-4] == '\r' || body[i-4] == '\n' ) ) return 1; } else return 1; } } return 0; } void readAtta() { char x[1000000]; atta[0] = '\0'; do { if ( fgets( x, 1000000, fin ) != NULL ) strcat( atta, x ); else break; } while ( strlen( x ) > 1 ); } int main() { fin = fopen( "email.in", "r" ); fout = fopen( "email.out", "w" ); fgets( from, 1000000, fin ); fgets( to, 1000000, fin ); fgets( cc, 1000000, fin ); fgets( bcc, 1000000, fin ); readAtta(); // printf( "DOTUK?!\n" ); fgets( subj, 1000000, fin ); // printf( "MINA!\n" ); char x; int la = 0; while ( fscanf( fin, "%c", &x ) == 1 ) { // printf( "AAA!\n" ); body[la++] = x; } body[la] = '\0'; // printf( "%s", from ); // printf( "%s", to ); // printf( "%s", cc ); // printf( "%s", bcc ); // printf( "%s", atta ); // printf( "%s", subj ); if ( strlen( from ) <= 6 ) { fprintf( fout, "1\n" ); return 0; } else if ( ( strlen( to ) <= 4 ) && ( strlen( cc ) <= 4 ) && ( strlen( bcc ) <= 5 ) ) { fprintf( fout, "2\n" ); return 0; } else if ( ( chkEmail( from, 5 ) == 0 ) || ( chkEmail( to, 3 ) == 0 ) || ( chkEmail( cc, 3 ) == 0 ) || ( chkEmail( bcc, 4 ) == 0 ) ) { // printf( "%d %d %d %d\n", chkEmail( from, 5 ), chkEmail( to, 3 ), chkEmail( cc, 3 ), chkEmail( bcc, 4 ) ); fprintf( fout, "3\n" ); return 0; } else if ( es() ) { fprintf( fout, "100\n" ); return 0; } else if ( eb() ) { fprintf( fout, "101\n" ); return 0; } else if ( lb() ) { fprintf( fout, "102\n" ); return 0; } else if ( ea() && (strstr( body, "attach" ) != NULL) ) { fprintf( fout, "103\n" ); return 0; } fprintf( fout, "0\n" ); fclose( fin ); fclose( fout ); return 0; }