class FlajoletMartin {

    public boolean offer(Object o) {
        boolean affected = false;

        for (int i=0; i<numHashGroups; i++) {
            for (int j=0; j<numHashFunctionsInHashGroup; j++) {
                HashFunction f = hashes[i][j];
                long v = f.hash(o);
                int index = rho(v);
                if (!bitmaps[i][j][index]) {
                    bitmaps[i][j][index] = true;
                    affected = true;
                }
            }
        }

        return affected;
    }

    public  FlajoletMartin(int bitmapSize, int numHashGroups, int numHashFunctionsInEachGroup);

}