public class Kount
{// counts # of nodes in tree using a void mehtod
  public static void main(String[] grdsz)
  { Tree2 tree = new Tree2();
    ConsoleReader  kbd = new ConsoleReader();
	System.out.println("Type your stuff");
	String line = kbd.readLine();
	
    tree.binary(line);
	tree.printInfix();
	System.out.println();
	System.out.println("The number of nodes is: "+tree.getCount());
  }
  
}

class Tree2
{ Node root;
  int n;

  private class Node  
  { char data;
  	Node left, right;
  }
  
  public Tree2()
  {  n=0;
  }
  
  public Node subTree(char item)
  {//creates a subtree
    Node t = new Node();
	t.data = item;
	t.left = null;
	t.right = null;
	return t;
  }
  
  public void leftTree(char item, Node p)
  { p.left = subTree(item);
  }
  
  public void rightTree(char item, Node p)
  { p.right = subTree(item);
  }
  
  public void binary(String line )
  //creates a bianty tree using iteration
  {  int len = line.length();
  	 char ch;
  	 root = subTree( line.charAt(0) );
	 Node p = null, q;
	 for(int j = 1; j < len; j++)	 
	 {  ch =  line.charAt(j);
		q = root;
		while ( q != null)
		{  p = q;
	       if( ch < q.data)
		      q = q.left;
		   else
		      q = q.right;
		}
		if(ch < p.data)
		   leftTree(ch, p);
		else
		   rightTree(ch, p);
	 }
  }		   
  
  private void infix(Node t )
  {  if( t != null)
     { infix(t.left);
	   System.out.print( t.data);
	   infix(t.right);
     }
  } 
  
  private void incCount(Node t )
  {  if( t != null)
     { incCount(t.left);
	   n++;
	   incCount(t.right);
     }
  } 
    
  public void printInfix()
  {  infix(root);
  }
  
  public int getCount()
  {  incCount(root);
     return n; 
  }
  
}  
