#include<iostream>
#include<iomanip>
#include<fstream>
#include<cstdlib>
#define NUM_STATE 14
#define NUM_YEAR 10

using namespace std;

ofstream out("output1.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 B[])
{
	int total=0;
	for(int i=0;i<NUM_YEAR;i++)
	{
		total+=B[i];
	}
	return total/((float)NUM_YEAR);
}


void find_HighLow(dataAcc A[])
{
	int high=-9999;
	string highint;
	int High;

	for(int i=0;i<NUM_STATE;i++)
		{
			for(int j=0;j<NUM_YEAR;j++)
			{
				if (A[i].numAcc[j]>high)
				{
					high=A[i].numAcc[j];
					highint = A[i].state;
					High=j;
				}
			}	
			
		}
	
	out<<"The highest number of road accidents = "<<high<<" at "<<highint<<" in year "<<High+2006<<endl;
}
int main()
{
	dataAcc A[NUM_STATE];
	ifstream inp("input1.txt");
	
	if(!inp)
	{
		cout<<"Sorry, input file does not exist!\nPress any key to continue . . ."<<endl;
		exit(0);
	}
	while(!inp.eof())
	{
		for(int i=0;i<NUM_STATE;i++)
		{
			for(int j=0;j<NUM_YEAR;j++)
			{
				inp>>A[i].numAcc[j];
			}
			getline(inp,A[i].state);
		}
	}
	for(int i=0;i<7;i++)
	{
		if((i==0) || (i==2) || (i==4) || (i==6))
			displayLine();
			
		if(i==1)
		{
			out << left<< setw(4) << " " << setw(13) << "STATE";
			out <<right<< setw(6) << "2006" << setw(7) << "2007" << setw(7) << "2008" << setw(7) << "2009" << setw(7) << "2010" 
				<< setw(7) << "2011" << setw(7) << "2012" << setw(7) << "2013" << setw(7) << "2014" << setw(7) << "2015" << setw(10) << "AVERAGE" << endl;
		}
		if(i==3)
		{
			for(int i=0;i<NUM_STATE;i++)
			{
				out<<left<<setw(16)<<A[i].state;
				for(int j=0;j<NUM_YEAR;j++)
				{
					out<<right<<setw(7)<<A[i].numAcc[j];
				}
			A[i].avg=cal_Avg(A[i].numAcc);	
			out << fixed << setprecision(1) << setw(10) <<A[i].avg << endl;
			}
		}
		if(i==5)
		{
			find_HighLow(A);
		}
	}
	inp.close();
	out.close();
	return 0;
}

