- #include <string> 
- #include <iostream> 
-   
- using namespace std; 
-   
- enum lex_t { 
- 	INVALID, 
- 	THE, 
- 	NOUN, 
- 	VERB, 
- 	CONJ, 
- 	DOT, 
- }; 
-   
- string word; 
- lex_t token; 
-   
- lex_t word_token( const string& w ) 
- { 
- 	if( w == "the" ) { 
- 		return THE; 
- 	} 
-   
- 	if( w == "birds" || 
- 		w == "fish" || 
- 		w == "C++" 
- 	) { 
- 		return NOUN; 
- 	} 
-   
- 	if( w == "fly" || 
- 		w == "rules" || 
- 		w == "swim"  
- 	) { 
- 		return VERB; 
- 	} 
-   
- 	if( w == "and" || 
- 		w == "or" || 
- 		w == "but"  
- 	) { 
- 		return CONJ; 
- 	} 
-   
- 	if( w == "." ) { 
- 		return DOT; 
- 	} 
-   
- 	return INVALID; 
- } 
-   
- void next_word() 
- { 
- 	cin >> word; 
- 	token = word_token( word ); 
- } 
-   
- bool maybe( lex_t t ) 
- { 
- 	if( token == t ) { 
- 		next_word(); 
- 	} 
- 	return true; 
- } 
-   
- bool match( lex_t t ) 
- { 
- 	if( token == t ) { 
- 		next_word(); 
- 		return true; 
- 	} 
- 	return false; 
- } 
-   
- void skip( lex_t t ) 
- { 
- 	while( !match( t ) ) { 
- 		next_word(); 
- 	} 
- } 
-   
- bool sentence() 
- { 
- 	if( maybe( THE ) && match( NOUN ) && match( VERB ) ) { 
- 		if( match( CONJ ) ) { 
- 			return sentence(); 
- 		} 
- 		if( match( DOT ) ) { 
- 			return true; 
- 		} 
- 		return false; 
- 	} 
- 	skip( DOT ); 
- 	return false; 
- } 
-   
- int main() { 
- 	next_word(); 
- 	while( cin ) { 
- 		cout << boolalpha << sentence() << endl; 
- 	} 
- } 
				I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmVudW0gbGV4X3QgewoJSU5WQUxJRCwKCVRIRSwKCU5PVU4sCglWRVJCLAoJQ09OSiwKCURPVCwKfTsKCnN0cmluZyB3b3JkOwpsZXhfdCB0b2tlbjsKCmxleF90IHdvcmRfdG9rZW4oIGNvbnN0IHN0cmluZyYgdyApCnsKCWlmKCB3ID09ICJ0aGUiICkgewoJCXJldHVybiBUSEU7Cgl9CgkKCWlmKCB3ID09ICJiaXJkcyIgfHwKCQl3ID09ICJmaXNoIiB8fAoJCXcgPT0gIkMrKyIKCSkgewoJCXJldHVybiBOT1VOOwoJfQoJCglpZiggdyA9PSAiZmx5IiB8fAoJCXcgPT0gInJ1bGVzIiB8fAoJCXcgPT0gInN3aW0iIAoJKSB7CgkJcmV0dXJuIFZFUkI7Cgl9CgkKCWlmKCB3ID09ICJhbmQiIHx8CgkJdyA9PSAib3IiIHx8CgkJdyA9PSAiYnV0IiAKCSkgewoJCXJldHVybiBDT05KOwoJfQoJCglpZiggdyA9PSAiLiIgKSB7CgkJcmV0dXJuIERPVDsKCX0KCQoJcmV0dXJuIElOVkFMSUQ7Cn0KCnZvaWQgbmV4dF93b3JkKCkKewoJY2luID4+IHdvcmQ7Cgl0b2tlbiA9IHdvcmRfdG9rZW4oIHdvcmQgKTsKfQoKYm9vbCBtYXliZSggbGV4X3QgdCApCnsKCWlmKCB0b2tlbiA9PSB0ICkgewoJCW5leHRfd29yZCgpOwoJfQoJcmV0dXJuIHRydWU7Cn0KCmJvb2wgbWF0Y2goIGxleF90IHQgKQp7CglpZiggdG9rZW4gPT0gdCApIHsKCQluZXh0X3dvcmQoKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXJldHVybiBmYWxzZTsKfQoKdm9pZCBza2lwKCBsZXhfdCB0ICkKewoJd2hpbGUoICFtYXRjaCggdCApICkgewoJCW5leHRfd29yZCgpOwoJfQp9Cgpib29sIHNlbnRlbmNlKCkKewoJaWYoIG1heWJlKCBUSEUgKSAmJiBtYXRjaCggTk9VTiApICYmIG1hdGNoKCBWRVJCICkgKSB7CgkJaWYoIG1hdGNoKCBDT05KICkgKSB7CgkJCXJldHVybiBzZW50ZW5jZSgpOwoJCX0KCQlpZiggbWF0Y2goIERPVCApICkgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoJc2tpcCggRE9UICk7CglyZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCkgewoJbmV4dF93b3JkKCk7Cgl3aGlsZSggY2luICkgewoJCWNvdXQgPDwgYm9vbGFscGhhIDw8IHNlbnRlbmNlKCkgPDwgZW5kbDsKCX0KfQ==