public class BoundedBuffer {
   private char buffer[];
   private int indexPut;
   private int indexGet;
   private int numberInBuffer=0;
   private int size;
   
   public BoundedBuffer(int length) {
      size=length;
      buffer=new char[size];
      indexPut=0;
      indexGet=0;
   }
   public synchronized void put(char c) throws InterruptedException {
      while (numberInBuffer==size)
         wait();
      buffer[indexPut++]=c;
      indexPut%=size;
      numberInBuffer++;
      notify();
   }
   public synchronized char get() throws InterruptedException {
      while (numberInBuffer==0)
         wait();
      char c=buffer[indexGet++];
      indexGet%=size;
      numberInBuffer--;
      notify();
      return c;
   }
}