import java.lang.*;
import java.util.*;

public class MultiHashtable extends Hashtable {

    public synchronized Object get(Object key) {
        Object obj = super.get(key);
        if (obj == null) return null;
        if (!(obj instanceof Vector)) return null;
        return ((Vector) obj).elementAt((int)(((Vector) obj).size()*Math.random()));
    }

    public synchronized Object remove(Object key) {
        Object obj = super.get(key);
        if (obj == null) return null;
        if (!(obj instanceof Vector)) return null;
        int choice = (int)(((Vector) obj).size()*Math.random());
        Object result = ((Vector) obj).elementAt(choice);
        ((Vector) obj).removeElementAt(choice);
        if (((Vector) obj).size() == 0) {
            super.remove(key);
        }
        return result;
    }

    public synchronized Object put(Object key,Object value) {
        Object obj = super.get(key);
        if (obj == null) {
            obj = new Vector();
        }
        if (!(obj instanceof Vector)) return null;
        Object result = ((Vector) obj).clone();
        ((Vector) obj).addElement(value);
        super.put(key,obj);
        return result;
    }
    
    public synchronized int size(Object key) {
        Object obj = super.get(key);
        if (obj == null) return 0;
        if (!(obj instanceof Vector)) return 0;
        return ((Vector) obj).size();
    }    
}
