#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <utility>
#include <cctype>
std:: string toLower( const std:: string & input) ;
std:: string stripSpaces( const std:: string & input) ;
std:: string stripPunctuation( const std:: string & input) ;
std:: vector < std:: string > bySentence( const std:: string & text) ;
std:: map < std:: string , int > countWords( const std:: string & text) ;
size_t countOccurrences( const std:: string & haystack, const std:: string & needle) ;
const std:: set < std:: string > ignore { "a" , "about" , "above" , "after" , "again" , "against" , "all" , "am" , "an" , "and" , "any" , "are" , "aren't" , "as" , "at" , "be" , "because" , "been" , "before" , "being" , "below" , "between" , "both" , "but" , "by" , "can't" , "cannot" , "could" , "couldn't" , "did" , "didn't" , "do" , "does" , "doesn't" , "doing" , "don't" , "down" , "during" , "each" , "few" , "for" , "from" , "further" , "had" , "hadn't" , "has" , "hasn't" , "have" , "haven't" , "having" , "he" , "he'd" , "he'll" , "he's" , "her" , "here" , "here's" , "hers" , "herself" , "him" , "himself" , "his" , "how" , "how's" , "i" , "i'd" , "i'll" , "i'm" , "i've" , "if" , "in" , "into" , "is" , "isn't" , "it" , "it's" , "its" , "itself" , "let's" , "me" , "more" , "most" , "mustn't" , "my" , "myself" , "no" , "nor" , "not" , "of" , "off" , "on" , "once" , "only" , "or" , "other" , "ought" , "our" , "ours" , "ourselves" , "out" , "over" , "own" , "same" , "shan't" , "she" , "she'd" , "she'll" , "she's" , "should" , "shouldn't" , "so" , "some" , "such" , "than" , "that" , "that's" , "the" , "their" , "theirs" , "them" , "themselves" , "then" , "there" , "there's" , "these" , "they" , "they'd" , "they'll" , "they're" , "they've" , "this" , "those" , "through" , "to" , "too" , "under" , "until" , "up" , "very" , "was" , "wasn't" , "we" , "we'd" , "we'll" , "we're" , "we've" , "were" , "weren't" , "what" , "what's" , "when" , "when's" , "where" , "where's" , "which" , "while" , "who" , "who's" , "whom" , "why" , "why's" , "with" , "won't" , "would" , "wouldn't" , "you" , "you'd" , "you'll" , "you're" , "you've" , "your" , "yours" , "yourself" , "yourselves" } ;
int main( )
{
std:: string text;
getline( std:: cin , text) ;
auto sentences = bySentence( text) ;
auto wordCount = countWords( text) ;
std:: vector < std:: pair < std:: string , int >> mostCommon;
mostCommon.reserve ( wordCount.size ( ) ) ;
for ( const auto & kv: wordCount)
mostCommon.push_back ( kv) ;
std:: sort ( mostCommon.begin ( ) , mostCommon.end ( ) , [ ] ( std:: pair < std:: string , int > a, std:: pair < std:: string , int > b) {
return a.second > b.second ;
} ) ;
std:: sort ( sentences.begin ( ) , sentences.end ( ) , [ mostCommon] ( const std:: string & a, const std:: string & b) {
return countOccurrences( a, mostCommon[ 0 ] .first ) > countOccurrences( b, mostCommon[ 0 ] .first ) ;
} ) ;
std:: cout << sentences[ 0 ] << std:: endl << std:: endl ;
std:: cout << sentences[ 1 ] << std:: endl << std:: endl ;
}
size_t countOccurrences( const std:: string & haystack, const std:: string & needle)
{
std:: stringstream ss( haystack) ;
std:: string word;
size_t count = 0 ;
while ( ss >> word)
if ( toLower( stripPunctuation( word) ) == needle)
count++ ;
return count;
}
std:: map < std:: string , int > countWords( const std:: string & text)
{
std:: map < std:: string , int > wordCount;
std:: stringstream ss( text) ;
std:: string word;
while ( ss >> word)
{
word = stripPunctuation( toLower( word) ) ;
if ( ignore.find ( word) == ignore.end ( ) )
wordCount[ word] ++ ;
}
return wordCount;
}
std:: string toLower( const std:: string & input)
{
std:: string result = input;
std:: transform ( result.begin ( ) , result.end ( ) , result.begin ( ) , :: tolower ) ;
return result;
}
std:: vector < std:: string > bySentence( const std:: string & text)
{
std:: vector < std:: string > sentences;
size_t start = 0 ;
size_t period = text.find ( '.' , start) ;
if ( period == std:: string :: npos )
{
sentences.push_back ( stripSpaces( text) ) ;
return sentences;
}
while ( true )
{
sentences.push_back ( stripSpaces( text.substr ( start, period - start + 1 ) ) ) ;
start = period + 1 ;
period = text.find ( '.' , start) ;
if ( period == std:: string :: npos )
break ;
}
return sentences;
}
std:: string stripSpaces( const std:: string & input)
{
size_t start = 0 , stop = input.length ( ) - 1 ;
while ( input[ stop] == ' ' )
stop-- ;
while ( input[ start] == ' ' )
start++ ;
return input.substr ( start, stop - start + 1 ) ;
}
std:: string stripPunctuation( const std:: string & input)
{
if ( all_of( input.begin ( ) , input.end ( ) , :: isalnum ) )
return input;
size_t start = 0 , stop = input.length ( ) - 1 ;
while ( ! isalnum ( input[ stop] ) )
stop-- ;
while ( ! isalnum ( input[ start] ) )
start++ ;
return input.substr ( start, stop - start + 1 ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoJI2luY2x1ZGUgPHNzdHJlYW0+CgkjaW5jbHVkZSA8ZnN0cmVhbT4KCSNpbmNsdWRlIDx2ZWN0b3I+CgkjaW5jbHVkZSA8YWxnb3JpdGhtPgoJI2luY2x1ZGUgPHNldD4KCSNpbmNsdWRlIDxtYXA+CgkjaW5jbHVkZSA8dXRpbGl0eT4KCSNpbmNsdWRlIDxjY3R5cGU+CgoJc3RkOjpzdHJpbmcgdG9Mb3dlcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpOwoJc3RkOjpzdHJpbmcgc3RyaXBTcGFjZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KTsKCXN0ZDo6c3RyaW5nIHN0cmlwUHVuY3R1YXRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KTsKCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBieVNlbnRlbmNlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKCXN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBpbnQ+IGNvdW50V29yZHMoY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpOwoJc2l6ZV90IGNvdW50T2NjdXJyZW5jZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGhheXN0YWNrLCBjb25zdCBzdGQ6OnN0cmluZyYgbmVlZGxlKTsKCgljb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaWdub3JlIHsiYSIsICJhYm91dCIsICJhYm92ZSIsICJhZnRlciIsICJhZ2FpbiIsICJhZ2FpbnN0IiwgImFsbCIsICJhbSIsICJhbiIsICJhbmQiLCAiYW55IiwgImFyZSIsICJhcmVuJ3QiLCAiYXMiLCAiYXQiLCAiYmUiLCAiYmVjYXVzZSIsICJiZWVuIiwgImJlZm9yZSIsICJiZWluZyIsICJiZWxvdyIsICJiZXR3ZWVuIiwgImJvdGgiLCAiYnV0IiwgImJ5IiwgImNhbid0IiwgImNhbm5vdCIsICJjb3VsZCIsICJjb3VsZG4ndCIsICJkaWQiLCAiZGlkbid0IiwgImRvIiwgImRvZXMiLCAiZG9lc24ndCIsICJkb2luZyIsICJkb24ndCIsICJkb3duIiwgImR1cmluZyIsICJlYWNoIiwgImZldyIsICJmb3IiLCAiZnJvbSIsICJmdXJ0aGVyIiwgImhhZCIsICJoYWRuJ3QiLCAiaGFzIiwgImhhc24ndCIsICJoYXZlIiwgImhhdmVuJ3QiLCAiaGF2aW5nIiwgImhlIiwgImhlJ2QiLCAiaGUnbGwiLCAiaGUncyIsICJoZXIiLCAiaGVyZSIsICJoZXJlJ3MiLCAiaGVycyIsICJoZXJzZWxmIiwgImhpbSIsICJoaW1zZWxmIiwgImhpcyIsICJob3ciLCAiaG93J3MiLCAiaSIsICJpJ2QiLCAiaSdsbCIsICJpJ20iLCAiaSd2ZSIsICJpZiIsICJpbiIsICJpbnRvIiwgImlzIiwgImlzbid0IiwgIml0IiwgIml0J3MiLCAiaXRzIiwgIml0c2VsZiIsICJsZXQncyIsICJtZSIsICJtb3JlIiwgIm1vc3QiLCAibXVzdG4ndCIsICJteSIsICJteXNlbGYiLCAibm8iLCAibm9yIiwgIm5vdCIsICJvZiIsICJvZmYiLCAib24iLCAib25jZSIsICJvbmx5IiwgIm9yIiwgIm90aGVyIiwgIm91Z2h0IiwgIm91ciIsICJvdXJzIiwgIm91cnNlbHZlcyIsICJvdXQiLCAib3ZlciIsICJvd24iLCAic2FtZSIsICJzaGFuJ3QiLCAic2hlIiwgInNoZSdkIiwgInNoZSdsbCIsICJzaGUncyIsICJzaG91bGQiLCAic2hvdWxkbid0IiwgInNvIiwgInNvbWUiLCAic3VjaCIsICJ0aGFuIiwgInRoYXQiLCAidGhhdCdzIiwgInRoZSIsICJ0aGVpciIsICJ0aGVpcnMiLCAidGhlbSIsICJ0aGVtc2VsdmVzIiwgInRoZW4iLCAidGhlcmUiLCAidGhlcmUncyIsICJ0aGVzZSIsICJ0aGV5IiwgInRoZXknZCIsICJ0aGV5J2xsIiwgInRoZXkncmUiLCAidGhleSd2ZSIsICJ0aGlzIiwgInRob3NlIiwgInRocm91Z2giLCAidG8iLCAidG9vIiwgInVuZGVyIiwgInVudGlsIiwgInVwIiwgInZlcnkiLCAid2FzIiwgIndhc24ndCIsICJ3ZSIsICJ3ZSdkIiwgIndlJ2xsIiwgIndlJ3JlIiwgIndlJ3ZlIiwgIndlcmUiLCAid2VyZW4ndCIsICJ3aGF0IiwgIndoYXQncyIsICJ3aGVuIiwgIndoZW4ncyIsICJ3aGVyZSIsICJ3aGVyZSdzIiwgIndoaWNoIiwgIndoaWxlIiwgIndobyIsICJ3aG8ncyIsICJ3aG9tIiwgIndoeSIsICJ3aHkncyIsICJ3aXRoIiwgIndvbid0IiwgIndvdWxkIiwgIndvdWxkbid0IiwgInlvdSIsICJ5b3UnZCIsICJ5b3UnbGwiLCAieW91J3JlIiwgInlvdSd2ZSIsICJ5b3VyIiwgInlvdXJzIiwgInlvdXJzZWxmIiwgInlvdXJzZWx2ZXMifTsKCglpbnQgbWFpbigpCgl7CgkJc3RkOjpzdHJpbmcgdGV4dDsKCQlnZXRsaW5lKHN0ZDo6Y2luLCB0ZXh0KTsKCQlhdXRvIHNlbnRlbmNlcyA9IGJ5U2VudGVuY2UodGV4dCk7CgkJYXV0byB3b3JkQ291bnQgPSBjb3VudFdvcmRzKHRleHQpOwoKCQlzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGludD4+IG1vc3RDb21tb247CgkJbW9zdENvbW1vbi5yZXNlcnZlKHdvcmRDb3VudC5zaXplKCkpOwoJCWZvcihjb25zdCBhdXRvJiBrdjogd29yZENvdW50KQoJCQltb3N0Q29tbW9uLnB1c2hfYmFjayhrdik7CgkJc3RkOjpzb3J0KG1vc3RDb21tb24uYmVnaW4oKSwgbW9zdENvbW1vbi5lbmQoKSwgW10oc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBpbnQ+IGEsIHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgaW50PiBiKSB7CgkJCXJldHVybiBhLnNlY29uZCA+IGIuc2Vjb25kOwoJCX0pOwoKCQlzdGQ6OnNvcnQoc2VudGVuY2VzLmJlZ2luKCksIHNlbnRlbmNlcy5lbmQoKSwgW21vc3RDb21tb25dKGNvbnN0IHN0ZDo6c3RyaW5nJiBhLCBjb25zdCBzdGQ6OnN0cmluZyYgYikgewoJCQlyZXR1cm4gY291bnRPY2N1cnJlbmNlcyhhLCBtb3N0Q29tbW9uWzBdLmZpcnN0KSA+IGNvdW50T2NjdXJyZW5jZXMoYiwgbW9zdENvbW1vblswXS5maXJzdCk7CgkJfSk7CgoJCXN0ZDo6Y291dCA8PCBzZW50ZW5jZXNbMF0gPDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKCQlzdGQ6OmNvdXQgPDwgc2VudGVuY2VzWzFdIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7Cgl9CgoJc2l6ZV90IGNvdW50T2NjdXJyZW5jZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGhheXN0YWNrLCBjb25zdCBzdGQ6OnN0cmluZyYgbmVlZGxlKQoJewoJCXN0ZDo6c3RyaW5nc3RyZWFtIHNzKGhheXN0YWNrKTsKCQlzdGQ6OnN0cmluZyB3b3JkOwoJCXNpemVfdCBjb3VudCA9IDA7CgkJd2hpbGUoc3MgPj4gd29yZCkKCQkJaWYodG9Mb3dlcihzdHJpcFB1bmN0dWF0aW9uKHdvcmQpKSA9PSBuZWVkbGUpCgkJCQljb3VudCsrOwoJCXJldHVybiBjb3VudDsKCX0KCglzdGQ6Om1hcDxzdGQ6OnN0cmluZywgaW50PiBjb3VudFdvcmRzKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoJewoJCXN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBpbnQ+IHdvcmRDb3VudDsKCQlzdGQ6OnN0cmluZ3N0cmVhbSBzcyh0ZXh0KTsKCQlzdGQ6OnN0cmluZyB3b3JkOwoJCXdoaWxlKHNzID4+IHdvcmQpCgkJewoJCQl3b3JkID0gc3RyaXBQdW5jdHVhdGlvbih0b0xvd2VyKHdvcmQpKTsKCQkJaWYoaWdub3JlLmZpbmQod29yZCkgPT0gaWdub3JlLmVuZCgpKQoJCQkJd29yZENvdW50W3dvcmRdKys7CgkJfQoJCXJldHVybiB3b3JkQ291bnQ7Cgl9CgoJc3RkOjpzdHJpbmcgdG9Mb3dlcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCgl7CgkJc3RkOjpzdHJpbmcgcmVzdWx0ID0gaW5wdXQ7CgkJc3RkOjp0cmFuc2Zvcm0ocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgcmVzdWx0LmJlZ2luKCksIDo6dG9sb3dlcik7CgkJcmV0dXJuIHJlc3VsdDsKCX0KCglzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYnlTZW50ZW5jZShjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkKCXsKCQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2VudGVuY2VzOwoJCXNpemVfdCBzdGFydCA9IDA7CgkJc2l6ZV90IHBlcmlvZCA9IHRleHQuZmluZCgnLicsIHN0YXJ0KTsKCQlpZihwZXJpb2QgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCgkJewoJCQlzZW50ZW5jZXMucHVzaF9iYWNrKHN0cmlwU3BhY2VzKHRleHQpKTsKCQkJcmV0dXJuIHNlbnRlbmNlczsKCQl9CgoJCXdoaWxlKHRydWUpCgkJewoJCQlzZW50ZW5jZXMucHVzaF9iYWNrKHN0cmlwU3BhY2VzKHRleHQuc3Vic3RyKHN0YXJ0LCBwZXJpb2QgLSBzdGFydCArIDEpKSk7CgkJCXN0YXJ0ID0gcGVyaW9kICsgMTsKCQkJcGVyaW9kID0gdGV4dC5maW5kKCcuJywgc3RhcnQpOwoJCQlpZihwZXJpb2QgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCgkJCQlicmVhazsKCQl9CgoJCXJldHVybiBzZW50ZW5jZXM7Cgl9CgoJc3RkOjpzdHJpbmcgc3RyaXBTcGFjZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KQoJewoJCXNpemVfdCBzdGFydCA9IDAsIHN0b3AgPSBpbnB1dC5sZW5ndGgoKSAtIDE7CgkJd2hpbGUoaW5wdXRbc3RvcF0gPT0gJyAnKQoJCQlzdG9wLS07CgkJd2hpbGUoaW5wdXRbc3RhcnRdID09ICcgJykKCQkJc3RhcnQrKzsKCQlyZXR1cm4gaW5wdXQuc3Vic3RyKHN0YXJ0LCBzdG9wIC0gc3RhcnQgKyAxKTsKCX0KCglzdGQ6OnN0cmluZyBzdHJpcFB1bmN0dWF0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkKCXsKCQlpZihhbGxfb2YoaW5wdXQuYmVnaW4oKSwgaW5wdXQuZW5kKCksIDo6aXNhbG51bSkpCgkJCXJldHVybiBpbnB1dDsKCQlzaXplX3Qgc3RhcnQgPSAwLCBzdG9wID0gaW5wdXQubGVuZ3RoKCkgLSAxOwoJCXdoaWxlKCFpc2FsbnVtKGlucHV0W3N0b3BdKSkKCQkJc3RvcC0tOwoJCXdoaWxlKCFpc2FsbnVtKGlucHV0W3N0YXJ0XSkpCgkJCXN0YXJ0Kys7CgkJcmV0dXJuIGlucHV0LnN1YnN0cihzdGFydCwgc3RvcCAtIHN0YXJ0ICsgMSk7Cgl9