#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>
using namespace std;

void displayLine (){

	for ( int i = 0 ; i < 52 ; i++ )
	{
		cout << "-" ;
	}
	cout << endl;
}

int findIndWinner ( int sumRow [], int marks [12][7], int indWinner[2] )
{
	
	int Highest = sumRow[0];
	
	for ( int i = 0 ; i < 12 ; i++ ){
		
		if ( sumRow[i] > Highest ){
		
		Highest = sumRow[i] ;
		indWinner[0] = marks [i][0];
		indWinner[1] = marks [i][1];	 
	}
	
}
}

int findTeamWinner ( int sumTeam[3] , int teamWinner[2] ) {
	
	int Highest = sumTeam[0];
	
	for ( int i = 0 ; i <3 ; i++ ){
		
		if ( sumTeam[i] > Highest ){
		
		Highest = sumTeam[i];
		teamWinner[0] = i+1 ;
		teamWinner[1] = Highest;}
	}
}

int main(){
	int marks [12][7], sumRow [12] = {0} , sumTeam[3] = {0}, indWinner[2] = {0}, teamWinner[2] = {0} , z = 0,i,j ;
	ifstream inp;
	inp.open ("input2.txt");
	
		if (!inp.is_open())
	{	
	cout << "Sorry, input file does not exist! " << endl;
	exit(0) ;
	}
	
	for ( i = 0 ; i < 12 ; i++ )
	{
	    for ( j = 0 ; j < 7 ; j++ ) 
	    {
	    	inp >> marks[i][j];
	    	
	    	if ( j >= 2 && j <= 6)
	    	sumRow[i] += marks[i][j];
		}
		
		if ( i >= 0 && i <= 3 )
	    	sumTeam[0] += sumRow[i];
	    	
	    if ( i >= 4 && i <= 7 )
	    	sumTeam[1] += sumRow[i];
	    	
	   	if ( i >= 8 && i < 12)
	    	sumTeam[2] += sumRow[i];

	}	
	
	displayLine () ;
	cout << "Id" << setw(8) << "E1" << setw(8) << "E2" << setw(8) << "E3" << setw(8) << "E4" << setw(8) << "E5" << setw(10) << "Total" << endl;
	displayLine () ;
	
	for ( int i = 0 ; i < 12 ; i++ ){
		for (int j = 0 ; j < 7 ; j++){
		
			if (( i == 0 || i == 4 || i == 8) && j == 0 )
			cout << "TEAM " << marks[i][j] << endl;
			
			if ( j != 0 )
			cout << left << setw(8) << marks[i][j]; 	
			
			
		}
		
		cout << setw(8) << sumRow [i] << endl;
		if ( i == 3 || i == 7 || i == 11 )
		{
			cout << "TOTAL" << right << setw(46) << sumTeam [z] << endl;
			z++;
			displayLine ();
			
		}
	}
	findIndWinner( sumRow , marks , indWinner );
	findTeamWinner ( sumTeam , teamWinner );
	
	cout << "\nWinner for Individual Category: " << indWinner[1] << " ( Team " <<  indWinner[0] << " )" << endl;
	cout << "Winner for Group Category: Team " << teamWinner[0] << " (Score = " << teamWinner[1] << ")" << endl;
	
	inp.close();
	return 0;
	   
	
}





