import math

class FizzBuzzRule:
def __init__(self, divisor, word):
self.divisor = divisor
self.word = word

def apply(self, n):
return self.word if n % self.divisor == 0 else ""

def fizzbuzz_generic(n, rules):
lcm = 1
for r in rules:
lcm = math.lcm(lcm, r.divisor)

pattern = []
for i in range(1, lcm + 1):
s = "".join(r.apply(i) for r in rules)
pattern.append(s if s else str(i))

for i in range(1, n + 1):
print(pattern[(i - 1) % lcm])

rules = [
FizzBuzzRule(3, "Fizz"),
FizzBuzzRule(5, "Buzz"),
]

fizzbuzz_generic(100, rules)