#include #include #include #include bool boy; int decodenum(const char *c) { return ((c[0] - '0' ) * 10 + c[1] - '0'); } bool control(int r, int m, int d) { //printf(" (r=%d %d %d) ", r, m, d); int unor = 28; if (r % 4 == 0) unor = 29; if (d == 0) return false; if (!boy) m-= 50; switch(m) { case 1: return (d <= 31); case 2: return (d <= unor); case 3: return (d <= 31); case 4: return (d <= 30); case 5: return (d <= 31); case 6: return (d <= 30); case 7: return (d <= 31); case 8: return (d <= 31); case 9: return (d <= 30); case 10: return (d <= 31); case 11: return (d <= 30); case 12: return (d <= 31); } return false; } bool modulo(const char *c) { unsigned long long a = 0; for (int i = 0; i < 11; i++) { if (isdigit(c[i])) { a *= 10; a += c[i] - '0'; } } return (a % 11) == 0; } bool first(const char *c) { //printf("delka "); if (strlen(c) < 10) return false; if (strlen(c) > 11) return false; //printf("cifry "); for (int i = 0; i < 6; i++) if (!isdigit(c[i])) return false; //printf("lom "); if (c[6] != '/') return false; //printf("cif "); for (int i = 7; i < strlen(c); i++) if (!isdigit(c[i])) return false; //printf("rok "); int r = decodenum(c); if (r < 20 && r > 9) return false; if (r >= 20 && r < 54 && strlen(c) > 10) return false; if ((r >= 54 || r <= 9) && strlen(c) < 11) return false; //printf("m "); int m = decodenum(c + 2); if (m > 50) { if (m > 62) return false; boy = false; } else { if (m == 0 || m > 12) return false; boy = true; } //printf("d "); int d = decodenum(c + 4); if (!control(r, m, d)) return false; //printf("sum "); if (strlen(c) == 11 && !modulo(c)) return false; return true; } int main() { char line[100]; gets(line); if (line[strlen(line)-1] == '\n') line[strlen(line)-1] = 0; while (strcmp(line, "end") != 0) { if (first(line)) { if (boy) printf("boy\n"); else printf("girl\n"); } else { printf("invalid\n"); } gets(line); if (line[strlen(line)-1] == '\n') line[strlen(line)-1] = 0; } }