#include<iostream>   //MUHAMMAD SHAWALUDDIN BIN SHAARI A20EC0099
#include<cmath>
#include <fstream>
#include <iomanip>
#include <string>
#define NUM_STATE 14
#define NUM_YEAR 10
//global constant
using namespace std;


ofstream out ("output.txt");
struct dataAcc
{
	int numAcc[10];
	string state;
	float avg;
};
//function prototype
void displayLine();
float cal_Avg(int[]);
void find_HighLow(dataAcc[]);

dataAcc road[NUM_STATE];

void displayLine()
{
	for (int i = 0; i < 98; i++)
	{
		out << "-";
	}
	out << endl;
}
//function to calculate average
float cal_Avg(int x[])
{
	float total =0, average;
	for (int i = 0; i < 10; i++)
	{
		total = total + x[i];
	}
	average = (float)total / 10;
	return average;
}
void find_HighLow(dataAcc a[])  //function to calculate the maximun total accident
{
	int max = 0;
	int max_year=0;
	string state;

	for (int i = 0; i < NUM_STATE; i++)
	{
		for (int j = 0; j < NUM_YEAR; j++)
		{
			if (a[i].numAcc[j] > max)
			{
				max = a[i].numAcc[j];
				max_year = (2006+j);
				state = a[i].state;
			}
		}
	}
	out << "The highest number of road accidents = " << max << " at"<< state<<" on "<< max_year<< endl;
	displayLine();
}
int main()
{
	ifstream input;
	input.open("input.txt");
	int year[10] = { 2006,2007,2008,2009,2010,2011,2012,2013,2014,2015 };
	int sum[14] = { 0 };

	for (int i = 0; i < NUM_STATE; i++)
	{
		getline(input, road[i].state, ',');
		for (int j = 0; j < NUM_YEAR; j++)
		{
			input >> road[i].numAcc[j];
			sum[i] = sum[i] + road[i].numAcc[j];
		}
	}
		displayLine();
		out << "      STATE        2006    2007   2008   2009   2010   2011   2012   2013   2014   2015   AVERAGE"<<endl;
		displayLine();

		for (int i = 0; i < NUM_STATE; i++)
		{
			out << left << setw(18) << road[i].state;
			for (int j = 0; j < NUM_YEAR; j++)
			{
				out << right << setw(7) << road[i].numAcc[j];

			}
			out << "  " << right << setw(7) <<setprecision (1)<<fixed<< cal_Avg(road[i].numAcc);
		}
		out << endl;
		displayLine();
		find_HighLow(road);
}