'Intersection is the minimum of corresponding counts.
>>> Counter(\'abbb\') & Counter(\'bcc\')
Counter({\'b\': 1})'

def __and__(self, other):

    if (not isinstance(other, Counter)):
        return NotImplemented
    result = Counter()
    for (elem, count) in self.items():
        other_count = other[elem]
        newcount = (count if (count < other_count) else other_count)
        if (newcount > 0):
            result[elem] = newcount
    return result
