class ListElementDeep
{
	ListElementDeep next;
	int i;

	ListElementDeep(int i)
	{
		this.i = i;
        }

	public ListElementDeep clone()
	{

	  ListElementDeep clone = new ListElementDeep(i);
          if (next != null) clone.next = next.clone();
  	  return clone;

	}

  public static void main(String args[]) throws Exception
  {
	System.out.println("\ncreate myList");
  	ListElementDeep myList = new ListElementDeep(1);
  	myList.next            = new ListElementDeep(2);
  	myList.next.next       = new ListElementDeep(3);
  	myList.next.next.next  = new ListElementDeep(4);

  	System.out.println("\nprint myList");
  	printList(myList);

  	System.out.println("\nclone myList...");
  	ListElementDeep myList_clone = myList.clone();


  	System.out.println("\nmodify myList...");
  	myList.i=10;
  	myList.next.i=20;
  	myList.next.next.i=30;
  	myList.next.next.next.i=40;

  	System.out.println("\nprint myList:");
  	printList(myList);

  	System.out.println("\nprint myList_clone:");
  	printList(myList_clone);
	}

	public static void printList(ListElementDeep e)
	{
		ListElementDeep l = e;
		if (l != null) System.out.print(l.i);
		l = l.next;

		while (l != null)
		{
			System.out.print(" -> ");
			System.out.print(l.i);
			l = l.next;
	  }

	  System.out.println();

  }
}