#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;

struct level{
	int id, iro, os;
};
level lista[2001];
int db=0;

struct gyakorisag{
	int iro, db;
};
void fel(int i)
{
	cout << endl << i << ". feladat" << endl << endl;
}
string sorozat(int kezdo)
{
	stringstream puffer;
	puffer << kezdo << " ";
	int talalt=0;
	for(int i=kezdo; i<=db; i++)
	{
		if(lista[i].os==kezdo)
		{
			talalt++;
			if(talalt==1) { puffer << "("; }
			puffer << sorozat(i);
		}
	}
	if(talalt>0) { puffer << ")"; }
	string tartalom;
	getline(puffer, tartalom);
	return tartalom;
}
int main(int argc, char **argv)
{
	// 1. beolvasas
	fel(1);
	ifstream be;
	be.open("naplo.txt");
	int i=0;
	while(be >> lista[i+1].iro >> lista[i+1].os )
	{
		lista[i+1].id=i+1;
		i++;
	}
	be.close();
	// 2. levelszam
	fel(2);
	db=i;
	cout << "levelszam " << db << endl;
	// 3. nyito
	fel(3);
	for(int i=1; i<=db; i++)
	{
		if(lista[i].os==0)
		{
			cout << i << " ";
		}
	}
	// 4. valasz nelkul
	fel(4);
	int valasz[2001]={0};
	for(int i=1; i<=db; i++)
	{
		valasz[lista[i].os]++;
	}
	int nincsvalasz=0;
	for(int i=1; i<=db; i++)
	{
		if( (lista[i].os==0) and (valasz[i]==0) )
		{
			nincsvalasz++;
		}
	}
	cout << "levelek szama, amire nincs valasz: " << nincsvalasz << endl;
	// 5. legszorgalmasabb
	fel(5);
	gyakorisag felado[101];
	for(int i=0; i<=100; i++)
	{
		felado[i].iro=i;
		felado[i].db=0;
	}
	for(int i=1; i<=db; i++)
	{
		felado[lista[i].iro].db++;
	}
	for(int i=0; i<=99; i++)
	{
		for(int j=0; j<=99; j++)
		{
			if(felado[j].db<felado[j+1].db)
			{
				swap(felado[j], felado[j+1]);
			}
		}
	}
	for(int i=0; i<5; i++)
	{
		if(felado[i].db>0)
		{
			cout << felado[i].iro << "\t" << felado[i].db << endl;
		}
	}
	
	// 6. lanc
	fel(6);
	int levid;
	cout << "Adj meg egy sorszamot!";
	cin >> levid;
	while(lista[levid].os>0)
	{
		cout << levid << " ";
		levid=lista[levid].os;
	}
	cout << levid << endl;
	// 7. levelfolyam
	fel(7);
	cout << "Adj meg egy sorszamot!";
	cin >> levid;
	int levtomb[2001]={0};
	int irotomb[101]={0};
	levtomb[levid]=1;
	for(int i=levid+1; i<=db; i++)
	{
		if(levtomb[lista[i].os]==1)
		{
			levtomb[i]=1;
			irotomb[lista[i].iro]=1;
		}
	}
	for(int i=0; i<=100; i++)
	{
		if(irotomb[i]==1)
		{
			cout << i << " ";
		}
	}
	// 8. rend.txt
	fel(8);
	ofstream ki;
	ki.open("rend.txt");
	for(int i=1; i<=db; i++)
	{
		if( lista[i].os==0 )
		{
			ki << sorozat(i);
			ki << endl;
		}
	}
	ki.close();
	return 0;
}

