public class Anillo {
	protected NodoAnillo seņalado;
	protected NodoAnillo marcado;
	
	public void inserta(Object o) {
		seņalado = new NodoAnillo(o,seņalado);
	}
	
	public void borra() {
		NodoAnillo sen = seņalado;
		if (sen==null) { // no hay
			System.out.println("(borra) ERROR: No hay elementos");
			System.exit(0);
		}
		if (sen==sen.siguiente) { // solo hay uno
			seņalado = null;
			marcado = null;
		} else { // hay mas de uno
			sen. anterior.siguiente = sen.siguiente;
			sen.siguiente.anterior = sen.anterior;
			seņalado = sen.siguiente;
			if (marcado == sen)
				marcado = null;
		}
	}
	public void marca() {
		marcado = seņalado;
	}
	public void rotaDerecha() {
		if (seņalado == null) {
			System.out.println("(rotaDerecha) ERROR: No hay elementos");
			System.exit(0);
		}
		seņalado = seņalado.siguiente;
	}
	public void rotaIzquierda() {
		if (seņalado == null) {
			System.out.println("(rotaIzquierda) ERROR: No hay elementos");
			System.exit(0);
		}
		seņalado = seņalado.anterior;
	}
	public void rotaHastaMarca() {
		if (marcado == null) {
			System.out.println("(rotarHastaMarca) ERROR: No hay elemento marcado");
			System.exit(0);
		}
		marcado = seņalado;
	}
	public Object getSeņalado() {
		if (seņalado==null) {
			System.out.println("(getSeņalado) ERROR: No hay elemento seņalado");
			System.exit(0);
		}
		return seņalado.informacion;
	}
	public boolean esVacia() {
		return seņalado == null;
	}
	public boolean esMarcado() {
		return seņalado == marcado;
	}				
}

class NodoAnillo {
	NodoAnillo anterior;
	NodoAnillo siguiente;
	Object informacion;
	
	public NodoAnillo(Object o,NodoAnillo sen) {
		informacion = o;
		if (sen==null) {
			anterior = this;
			siguiente = this;
		} else {
			this.siguiente = sen.siguiente;
			this.anterior = sen; 
			sen.siguiente.anterior = this;
			sen.siguiente = this;
		}
	}
}

	