#include <stdio.h>          /* podkluchenie bibliotek*/
#include <string.h>
#include <conio.h>
#include <alloc.h>
#include <dos.h>
#define TREE struct tree
TREE
 {
	char Name[50];
	int m1,m2,m3,m4;
	int Vr;            /*nomer vershinu*/
	int l;             /*chislo vuhodyashih vershin*/
	TREE *Point[20];   /*ykzateli na vershinu sledyushego urovnya*/
 };
TREE *Que[50];
TREE *ptr_Tree[50];
TREE *ptr_Tre,*ptr_Trt,*Root;
int Lp,Rp;
 /*Vkluchenie elementa v ochered*/
void pushQ(TREE *ptr)
 {
	Que[Lp++]=ptr;
 }
 /*Ydalenie elementa iz ocheredi*/
TREE *popQ()
 {
	return Que[Rp++];
 }
void TreeForm(int n)          /*formirovanie dereva*/
 {
	int i,l,j,Nom;
	for (i=0; i<n; i++)
	 {
		ptr_Tree[i]=(TREE *)malloc(sizeof(TREE));
		ptr_Tree[i]->Vr = i+1;
	 }
	for (i=0; i<n; i++)
	 {
		ptr_Trt=ptr_Tree[i];
		printf("Skolko vershin vuhodit iz %-2d?\n",i+1);
		scanf("%d",&l);
		ptr_Trt->l=l;
		printf("Kakie vershinu vuhodyat?\n");
		 for (j=0; j<l; j++)
			{
			 scanf("%d",&Nom);
			 ptr_Trt->Point[j]=ptr_Tree[Nom-1];
			}
		}
 }
void Frtln(int Tree[50],int *k)      /*frontalnui obhod*/
 {
	int kl,l,j;
	kl = 0;
	pushQ(ptr_Tree[0]);
	while( Lp != Rp )
	 {
		ptr_Tre = popQ();
		Tree[kl] = ptr_Tre->Vr; kl++;
		l=ptr_Tre->l;
		 for (j=0; j<l; j++)
			pushQ(ptr_Tre->Point[j]);
		*k = kl;
	 }
 }
void Insert_Tree()
 {
 }
void Del_Tree()
 {
 }
void Print_Tree()
 {
	TREE *ptr_Tr;
	int j,key;
	pushQ(Root);
	while (key!= 0)
	 {
		clrscr();
		ptr_Tre=ptr_Trt;
		ptr_Trt = popQ();
		for(j=0; j<ptr_Trt->l; j++)
		 {
			ptr_Tr=ptr_Trt->Point[j];
			if(ptr_Tr->m1==0)
			printf("%d%-7s\n",j+1,ptr_Tr->Name);
			else
			printf("%d%-7s%d %d %d %d\n",j+1,ptr_Tr->Name,ptr_Tr->m1,ptr_Tr->m2,ptr_Tr->m3,ptr_Tr->m4);
		 }
		printf("Vvedite key ('0'-to EXIT): ");
		scanf("%d",&key);
	 if(key>j || key<0)
		{
		 printf("Takogo klu4a net");
		 break;
		}
	 if(key==-1||key==1||key==2||key==3||key==4)
		{
		 if(key==-1) pushQ(ptr_Tre);
		 else pushQ(ptr_Trt->Point[key-1]);
		}
	 else
		pushQ(Root);
	 }
}
void Modifikaciya()
 {
 }
int main()                      /*osnovaya programma*/
 {
	char c;
	int n;
	clrscr();
	do
	 {                      /*vuvod na ekran menu*/
		window(48,1,80,8);
		gotoxy(1,1);puts("1.Formirovanie dereva MISiS");
		gotoxy(1,2);puts("2.Vkluchenie vershinu v derevo");
		gotoxy(1,3);puts("3.Ydalenie vershinu iz dereva");
		gotoxy(1,4);puts("4.Modifikaciya ocenok stydenta");
		gotoxy(1,5);puts("5.Pechat' dereva");
		gotoxy(1,6);puts("6.Vuhod");
		c = getch();              /*ojidanie najatiya klavishi*/
		window(1,1,47,25);
		clrscr();
		switch(c)
		 {             /*vubor punkta menu*/
			case '1':
			 {           /*formirovanie dereva*/
				printf("Vvedite kolichestvo vershin \n");
				scanf("%d",n);
				TreeForm(n);
				break;
			 }
			case '2':
			 {           /*vkluchenie vershinu v derevo*/
				printf();
				scanf();
				Insert_Tree();
				break;
			 }
			case '3':
			 {           /*ydalenie vershinu iz dereva*/
				Del_Tree();
				break;
			 }
			case '4':
			 {           /*modifikaciya icenok stydenta*/

				printf();
				break;
			 }
			case '5':
			 {           /*pechat' vsego dereva*/
				printf("Struktura MISiS");
				Print_Tree();
				break;
			 }
			case '6': {           /*vuhod*/
				break;
			 }
		 }
	 } while(c>'0' && c<'6');
 return c;
 }