class Quarto{

int numero;
int repositorio;

Quarto(int numero, int repositorio){
this.numero = numero;
this.repositorio = repositorio;
}

public int getNumero() {
return numero;
}

public int getRepositorio() {
return repositorio;
}
}

class NoAvl{

NoAvl noEsquerdo;
NoAvl noDireito;
Quarto quarto;
boolean mudou;
int balance;

NoAvl(Quarto quarto){
this.noEsquerdo = null;
this.noDireito = null;
this.mudou = false;
this.quarto = quarto;
this.balance = 0;
}


public void setBalance(int i){
this.balance += i;
if(this.balance == 0) {
mudou = false;
} else {
mudou = true;
}
}
}

public class L2Q2 {

NoAvl raiz;

public L2Q2(){
this.raiz = null;
}

public NoAvl inserir(NoAvl no, Quarto quarto){
if(no == null){
no = new NoAvl(quarto);
no.balance = 0;
}
else if(quarto.getNumero() < no.quarto.getNumero()){
no.noEsquerdo = inserir(no.noEsquerdo, quarto);
no.balance = no.balance - 1;
if(no.balance == -2){
if(no.noEsquerdo.balance == -1){
no = rotaciona(no, "simples");
}
else{
no = rotaciona(no, "dupla");
}
}
}
else{
no.noDireito = inserir(no.noDireito, quarto);
no.balance = no.balance + 1;
if(no.balance == 2){
if(no.noDireito.balance == 1){
no = rotaciona(no, "simples");
}
else{
no = rotaciona(no, "dupla");
}
}
}
return no;
}

private NoAvl rotaciona(NoAvl no, String tipo) {
if(no.balance == 2) {
if(tipo.equals("simples")) {
NoAvl b = no.noDireito;
no.noDireito = b.noEsquerdo;
b.noEsquerdo = raiz;
if(b.balance == +1) {
no.balance = 0;
} else if(b.balance == 0) {
no.balance = +1;
}
no.mudou = false;
b.balance = 0;
b.mudou = false;
return b;
} else if(tipo.equals("dupla")) {
NoAvl b = no.noDireito;
NoAvl c = no.noDireito.noEsquerdo;
if(c != null) {
NoAvl d = c.noDireito;
NoAvl e = c.noEsquerdo;
no.noDireito = e;
b.noEsquerdo = d;
c.noEsquerdo = no;
c.noDireito = b;
if(c.balance == -1) {
no.balance = 0;
b.balance = 1;
} else if(c.balance == +1){
no.balance = -1;
b.balance = 0;
} else {
no.balance = 0;
b.balance = 0;
}
b.mudou = false;
no.mudou = false;
c.balance = 0;
c.mudou = false;
return c;
}
}
} else if(no.balance == -2) {
if(tipo.equals("simples")) {
NoAvl b = no.noEsquerdo;
no.noEsquerdo = b.noDireito;
b.noDireito = no;
if(b.balance == -1) {
no.balance = 0;
} else if(b.balance == 0) {
no.balance = +1;
}
no.mudou = false;
b.balance = 0;
b.mudou = false;
return b;
} else if(tipo.equals("dupla")) {
NoAvl b = no.noEsquerdo;
NoAvl c = no.noEsquerdo.noDireito;
if(c != null) {
NoAvl d = c.noDireito;
NoAvl e = c.noEsquerdo;
no.noEsquerdo = d;
b.noDireito = e;
c.noDireito = no;
c.noEsquerdo = b;
if(c.balance == -1) {
no.balance = 1;
b.balance = 0;
} else if(c.balance == +1){
no.balance = 0;
b.balance = -1;
} else {
no.balance = 0;
b.balance = 0;
}
b.mudou = false;
no.mudou = false;
c.balance = 0;
c.mudou = false;
return c;
}
}
}
return null;
}

public NoAvl buscar(NoAvl no, Quarto quarto){
NoAvl noBusca = no;
if (no == null) {
noBusca = null;
} else {
if (quarto.getNumero() == no.quarto.getNumero()){
noBusca = no;
} else if (quarto.getNumero() < noBusca.quarto.getNumero()) {
noBusca = buscar(no.noEsquerdo, quarto);
} else if (quarto.getNumero() > noBusca.quarto.getNumero()) {
noBusca = buscar(no.noDireito, quarto);
}
}
return noBusca;
}
public int nivelNumero(int valor){
return this.nivelNo2(raiz, valor);
}

private int nivelNo2(NoAvl no, int valor){
int retorno = 0;
if(no == null){
retorno = 0;
}
else{
if(valor == no.quarto.getNumero()){
retorno = 0;
}
else if(valor < no.quarto.getNumero()){
retorno = 1 + nivelNo2(no.noEsquerdo, valor);
}
else if(valor > no.quarto.getNumero()){
retorno = 1 + nivelNo2(no.noDireito, valor);
}
}
return retorno;
}
public int nivel(Quarto quarto){
return this.nivelNo(quarto);
}

private int nivelNo(Quarto quarto){
int retorno = 0;

if(this.raiz == null){
}
else{
if(quarto.getNumero() == this.raiz.quarto.getNumero()){
retorno = 0;
}
else if(quarto.getNumero() < this.raiz.quarto.getNumero()){
retorno = 1 + nivelNo(quarto);
}
else if(quarto.getNumero() > this.raiz.quarto.getNumero()){
retorno = 1 + nivelNo(quarto);
}
}
return retorno;
}
public NoAvl existeNo(NoAvl no, int valor) {
NoAvl noBusca = no;
if (no == null) {
noBusca = null;
} else {
if(valor == no.quarto.getNumero()) {
noBusca = no;
} else if (valor < no.quarto.getNumero()) {
noBusca = existeNo(no.noEsquerdo, valor);
} else if (valor > no.quarto.getNumero()) {
noBusca = existeNo(no.noDireito, valor);
}
}
return noBusca;
}
public static void main(String[] args) {
new L2Q2();

Arquivo io = new Arquivo("L2Q2.in", "L2Q2.out");
L2Q2 arvore = new L2Q2();
int conjunto = 0;
boolean primeiro = true;


while(!io.isEndOfFile()){

String leitura = io.readString();

if(primeiro){
conjunto++;
io.print("Conjunto #");
io.println(conjunto);
primeiro = false;

arvore = new L2Q2();
}

if(leitura.equals("reset")){
io.println();
arvore = new L2Q2();
conjunto++;
io.print("Conjunto #");
io.println(conjunto);

}

else if(leitura.equals("inserir")){
int numeroQuarto = io.readInt();
int repositorio = io.readInt();

Quarto quarto = new Quarto(numeroQuarto, repositorio);
NoAvl procurado = arvore.buscar(arvore.raiz, quarto);

if(procurado != null){
if(procurado.quarto.getRepositorio() != quarto.getRepositorio()){
io.print("ja existe quarto ");
io.print(quarto.getNumero());
io.print(" no nivel ");
io.print(arvore.nivelNumero(quarto.getNumero()));
io.println(" com outro repositorio");
}
else{
io.print("ja existe quarto ");
io.print(quarto.getNumero());
io.print(" no nivel ");
io.print(arvore.nivelNumero(quarto.getNumero()));
io.println(" com repositorio indicado");
}
}
else{
arvore.raiz = arvore.inserir(arvore.raiz, quarto);

io.print("quarto ");
io.print(quarto.getNumero());
io.print(" com repositorio ");
io.print(quarto.getRepositorio());
io.print(" inserido no nivel ");
io.println(arvore.nivelNumero(quarto.getNumero()));

}

}
else if(leitura.equals("getReservas")){

int numeroQuarto = io.readInt();
Quarto quarto = new Quarto(numeroQuarto, 0);
NoAvl procurado = arvore.buscar(arvore.raiz, quarto);

if(procurado != null){
io.print("Numero: ");
io.print(quarto.getNumero());
io.print(", Reservas: ");
io.print(procurado.quarto.getRepositorio());
io.print(", Nivel: ");
io.println(arvore.nivelNumero(quarto.getNumero()));
}
else{
io.print("nao existe quarto ");
io.println(quarto.getNumero());
}
}
}
io.close();
}
}