#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <string>

using namespace std;

/*
     Ovo je probni tekst. 		Pa druga recenica! Pa treca? Pa cetvrta    
     
     
     Jos jedna recenica.
*/

class Tekst
{
public:
	void CitajRecenice( istream& f )
		{
		string red;
		
		while( getline( f, red ) ){
			unsigned kraj = 0;
			while( kraj < red.size() - 1 ){
				// pronadjemo pocetak
				unsigned pocetak = red.find_first_not_of( " \t\r\n", kraj );
				if( pocetak == string::npos )
					break;
				// pronadjemo kraj
				kraj = red.find_first_of( ".?!", pocetak );
				if( kraj == string::npos )
					kraj = red.find_last_not_of( " \t\r\n" );
				kraj++;
				// izdvojimo recenicu i zapamtimo je
				_Recenice.push_back( red.substr( pocetak, kraj-pocetak ) );	
				}
			}
		}
		
	void IspisiRecenice( ostream& f ) const
		{
		for( unsigned i=0; i<_Recenice.size(); i++ )
			f << i << " - " << _Recenice[i] << " (" << _Recenice[i].length() << ")" << (int)_Recenice[i][0] << endl;
		}
		
private:
	vector<string>	_Recenice;
};

void pretrazivanjeTeksta( char* imedat )
{
	ifstream f(imedat);
	if( !f )
		throw string("Nije uspelo otvaranje datoteke!");
		
	Tekst t;
	t.CitajRecenice( f );
	t.IspisiRecenice( cout );	
}

main( int argc, char** argv )
{
	try	{
		if( argc < 2 )
			throw string( "Nedostaje naziv datoteke!" );
		pretrazivanjeTeksta( argv[1] );
		}
	catch( const string& s ){
		cerr << "GRESKA: " << s << endl;
		}
	return 0;	
}
