/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

class No<T> {
 
	T elemento;
	No<T> proximo;
	No<T> anterior;
 
	public No(T elemento, No<T> anterior, No<T> proximo) {
		this.elemento = elemento;
		this.proximo = proximo;
		this.anterior = anterior;
	}
 
	public No(T elemento) {
		this.elemento = elemento;
		proximo = null;
		anterior = null;
	}
 
	@Override
	public String toString() {
		return elemento.toString();
	}
}
 
class Lista<T> {
 
	private No<T> primeiro;
	private int tamanho;
 
	public void adicionar(T item){
		No<T> novo = new No<T>(item);
 
		if (primeiro == null){
			primeiro = novo;
			return;
		}
 
		No<T> curr = primeiro;
 
		while (curr.proximo != null){
			curr = curr.proximo;
		}
 
		curr.proximo = novo;
		novo.anterior = curr;
	}
 
	public boolean remover(T item) {
	    if (primeiro == null) return false;
		
		if (primeiro.elemento.equals(item)) {
		        primeiro = primeiro.proximo;
		        if (primeiro != null){
		        	primeiro.anterior = null;
		        }
		        return true;
		}
	    
		No<T> n = primeiro;		
		while (n != null && !n.elemento.equals(item)){
			n = n.proximo;		
		}
		
		if (n == null) return false;
		
		n.anterior.proximo = n.proximo;
		if (n.proximo != null){
			n.proximo.anterior = n.anterior;
		}		
		
		tamanho--;
		return true;
 
	}
 
	public void mostrar(){
		No<T> curr = primeiro;
 
		while (curr != null){
			System.out.print(curr.toString() + " -> ");
			curr = curr.proximo;
		}
 
		System.out.println("NULL");
	}
}

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		Lista<Integer> lista = new Lista<>();
 
		lista.adicionar(5);
		lista.adicionar(15);
		lista.adicionar(2);
		lista.adicionar(9);
 
		lista.mostrar();
 
		lista.adicionar(23);
		lista.adicionar(4);
		lista.adicionar(18);
 
		lista.mostrar();
 
		lista.remover(15);
 
		System.out.println("Depois de remover o 15");
		lista.mostrar();
		lista.remover(18);
		System.out.println("Depois de remover o 18");
		lista.mostrar();
		lista.remover(5);
		System.out.println("Depois de remover o 5");
		lista.mostrar();
		lista.remover(2);
		lista.remover(9);
		lista.remover(23);
		lista.remover(4);
		System.out.println("Depois de remover todos");
		lista.mostrar();
	}
}