#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>
#include <cstring>
#define U 20
#define R 3
using namespace std;

void getInput(string uni[][1],int student[][R])
{
	ifstream read("input1.txt");
	if(!read)
	{
		cout<<"Error !!"<<endl;
		exit(0);
	}
	
	for(int i=0; read>>uni[i][0];i++)
	{
		read>>student[i][1];
		read>>student[i][2];
		read>>student[i][3];
	}
	read.close();
}


void calTotal(int student[][R],int &t_in,int &t_en,int &t_out)
{
	for (int i=0;i<R;i++)
	{
		t_in+=student[i][1];
		t_en+=student[i][2];
		t_out+=student[i][3];
	}
	
	
}

void getLowest(int student[][R], int &in, int &en, int &out)
{
	int lowin=student[0][1];
	int lowen=student[0][2];
	int lowout=student[0][3];
	for(int l=0;l<U;l++)
	{
		if(student[l][1]<lowin)
		{
			lowin=student[l][1];
			in=l;	
		}
		if(student[l][2]<lowen)
		{
			lowen=student[l][2];
			en=l;
		}
		if(student[l][3]<lowout)
		{
			lowout=student[l][0];
			out=l;
		}
	}
	
}

void getHighest( int student[][R], int &hin, int &hen, int &hout)
{
	int highin=student[0][1];
	int highen=student[0][2];
	int highout=student[0][3];
	for(int h=0;h<U;h++)
	{
		if(student[h][1]>highin)
		{
			highin=student[h][1];
			hin=h;	
		}
		if(student[h][2]>highen)
		{
			highen=student[h][2];
			hen=h;
		}
		if(student[h][3]>highout)
		{
			highout=student[h][0];
			hout=h;
		}
	}
}

void calcAvg(int in,int en,int out, float &avgin, float &avgen, float &avgout)
{
	avgin= in/20;
	avgen= en/20;
	avgout= out/20;
}

int main()
{
	string listUni[U][1];
	int listStd[U][R];
	ifstream read("input1.txt");
	ofstream final("output.txt");
	getInput(listUni,listStd);
	
	int totalint=0,totalen=0,totalout=0;
	calTotal(listStd,totalint,totalen,totalout);
	
	int intlo=0,enlo=0,outlo=0;
	getLowest(listStd,intlo,enlo,outlo);
	
	int inth=0,enh=0,outh=0;
	getHighest(listStd,inth,enh,outh);
	
	float averagei=0,averagen=0,averageo=0;
	calcAvg(totalint,totalen,totalout,averagei,averagen,averageo);
	
	final<<"\tNUMBER OF STUDENTS' INTAKE, ENROLMENT AND OUTPUT"<<endl
		 <<"\t\tIN PUBLIC UNIVERSITIES (2015)"<<endl<<endl;
	final<<endl<<"---------------------------------------------------------------"
		 <<endl<<" UNIVERSITY\t\tINTAKE\t\tENROLMENT\t\tOUTPUT "
		 <<endl<<"---------------------------------------------------------------"<<endl;
	for(int m=0;m<U;m++)
	{
		final<<"\t"<<listUni[m][0];
		final<<"\t\t\t"<<listStd[m][1]<<"\t\t\t"<<listStd[m][2]
		<<"\t\t\t"<<listStd[m][3];
		final<<endl;
	}
	final<<fixed<<setprecision(2);
	final<< "---------------------------------------------------------------"<<endl
		 <<"Total\t\t"<<totalint<<"\t\t"<<totalen<<"\t\t"<<totalout<<endl;
		 
	final<<fixed<<setprecision(2);	 
	final<<"Average\t\t"<<averagei<<"\t\t"<<averagen<<"\t\t"<<averageo<<"\t\t"<<endl
		 <<"---------------------------------------------------------------"<<endl;
	
	final<<"THE LOWEST NUMBER OF STUDENTS' INTAKE = "<<listStd[intlo][1]<<" ("<<listUni[intlo][0]<<")"<<endl;
	final<<"THE LOWEST NUMBER OF STUDENTS' ENROLMENT = "<<listStd[enlo][2]<<" ("<<listUni[enlo][0]<<")"<<endl;
	final<<"THE LOWEST NUMBER OF STUDENTS' OUTPUT = "<<listStd[outlo][3]<<" ("<<listUni[outlo][0]<<")"<<endl<<endl;
	
	final<<"THE HIGHEST NUMBER OF STUDENTS' INTAKE = "<<listStd[inth][1]<<" ("<<listUni[inth][0]<<")"<<endl
		 <<"THE HIGHEST NUMBER OF STUDENTS' ENROLMENT = "<<listStd[enh][2]<<" ("<<listUni[enh][0]<<")"<<endl
		 <<"THE HIGHEST NUMBER OF STUDENTS' OUTPUT = "<<listStd[outh][3]<<" ("<<listUni[outh][0]<<")"<<endl<<endl;
	
	final<<"THE RANGE OF NUMBER OF STUDENTS' INTAKE = "<<listStd[inth][1]-listStd[intlo][1]<<endl
		 <<"THE RANGE OF NUMBER OF STUDENTS' ENROLMENT = "<< listStd[enh][2] - listStd[enlo][2]<<endl
		 <<"THE RANGE OF NUMBER OF STUDENTS' OUTPUT = "<< listStd[outh][3] - listStd[outlo][3]<<endl;
	
	read.close();
	final.close();
	
	return 0;
	
}
