#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>
#define NUM_STATE 14
#define NUM_YEAR 10
using namespace std;
ofstream out ( "Output.txt");

struct dataAcc 
{
	int numAcc[10];	//number of road accidents from 2006-2015 
	string state;  	//states in Malaysia  
	float avg;    	//average number of road accidents for 2006-2015 

};

void displayLine()
{
	for (int i = 0; i < 98; i++)
 		out << "-";
    out << endl;  
} 

float cal_Avg ( int Acc[] )
{
	int Total = 0;
	for ( int i = 0 ; i < NUM_YEAR ; i++ )
		Total += Acc[i];
	
	return Total/(float)NUM_YEAR ;
}
 
void find_HighLow( dataAcc Acc[] )
{
	int HighestNum = Acc[0].numAcc[0] , HighestYear ;
	string HighestState ; 
	
	for ( int i = 0 ; i < NUM_STATE ; i++ )
	{
		for ( int j = 0 ; j < NUM_YEAR ; j++ )
		{
			if ( Acc[i].numAcc[j] > HighestNum )
			{
				HighestNum = Acc[i].numAcc[j] ;
				HighestState = Acc[i].state ;
				HighestYear = j + 2006 ;
			}
		}
	}
	
	out << "The highest number of road accidents = " << HighestNum 
		<< " at " << HighestState << " on " << HighestYear << endl;	 
}


int main ()
{
dataAcc Acc [NUM_STATE];
ifstream inp ( "input1.txt");

if (!inp.is_open())
	{	
	cout << "Error!!" << endl;
	exit(0) ;	
	}

for ( int i = 0 ; i < NUM_STATE ; i++ )
	{
	for ( int j = 0 ; j < NUM_YEAR ; j++ )
		inp >> Acc[i].numAcc[j];		
	getline ( inp , Acc[i].state );				
	}
	
displayLine() ;
out << endl;
out << left ;
out << setw(20) << "  STATE" ;

int year = 2006 ;
for ( int y = 0 ; y < NUM_YEAR ; y++ )
	{
		out << setw(7) << year + y ;
	}
	out << "AVERAGE" << endl << endl ;
	
displayLine() ;
out << endl ;

for ( int i = 0 ; i < NUM_STATE ; i++ )
{
	out << setw(20) << Acc[i].state ; 
	
	for ( int j = 0 ; j < NUM_YEAR ; j++ )
	{
		Acc[i].avg = cal_Avg( Acc[i].numAcc) ;		
		out << setw(7) << Acc[i].numAcc[j];				
	}
	out << fixed << setprecision(1);
	out	<< setw(7) << Acc[i].avg << endl << endl ;	
}

displayLine();
out << endl;
find_HighLow( Acc );
out << endl;
displayLine();

return 0;
}


