struct binarno_el {
	int value;
	int b;
};

struct binarno {
	binarno_el elementi[10000];
};

typedef binarno* bt;
typedef int bn;

bt InitB(int x, bt t) {
	t = new binarno;
	
	for(int i=0; i<10000; i++)
		t->elementi[i].b=0;
	
	t->elementi[1].value = x;
	t->elementi[1].b = 1;
	
	return t;
}

bn RootB(bt t) {
	return 1;
}

bn ParentB(bn n, bt t) {
	if(n==RootB(t))
		return 0;
	else return n/2;
}

bn LeftChildB(bn n, bt t) {
	if(t->elementi[n*2].b==0)
		return 0;
	else return n*2;
}

bn RightChildB(bn n, bt t) {
	if(t->elementi[n*2+1].b==0)
		return 0;
	else return n*2+1;
}

int LabelB(bn n, bt t) {
	return t->elementi[n].value;
}

void ChangeLabelB(int x, bn n, bt t) {
	t->elementi[n].value = x;
}

void CreateLeftB(int x, bn n, bt t) {
	if(t->elementi[n*2].b==1)
		return;
	
	t->elementi[n*2].value = x;
	t->elementi[n*2].b = 1;
}

void CreateRightB(int x, bn n, bt t) {
	if(t->elementi[n*2+1].b==1)
		return;
	
	t->elementi[n*2+1].value = x;
	t->elementi[n*2+1].b = 1;
}

void DeleteB(bn n, bt t) {
	if(n==1)
		return;
	
	if(n>=10000)
		return;
	
	if(t->elementi[n*2].b==1)
		DeleteB(n*2, t);
	if(t->elementi[n*2+1].b==1)
		DeleteB(n*2+1, t);
	
	t->elementi[n].b = 0;
}