def make_circuit(n: int, f) -> QuantumCircuit:
    input_qubit = QuantumRegister(n, 'qc')
    classical = ClassicalRegister(n, 'qm')
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0])
    prog.h(input_qubit[1])
    prog.h(input_qubit[2])
    prog.h(input_qubit[3])
    prog.cx(input_qubit[4], input_qubit[0])
    prog.h(input_qubit[0])
    prog.cz(input_qubit[4], input_qubit[0])
    prog.h(input_qubit[0])
    prog.z(input_qubit[4])
    prog.cx(input_qubit[4], input_qubit[0])
    prog.cx(input_qubit[4], input_qubit[0])
    prog.h(input_qubit[4])
    Zf = build_oracle(n, f)
    repeat = floor(((sqrt((2 ** n)) * pi) / 4))
    for i in range(1):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])
        prog.h(input_qubit[1])
        prog.h(input_qubit[2])
        prog.cx(input_qubit[1], input_qubit[2])
        prog.h(input_qubit[3])
        prog.x(input_qubit[0])
        prog.x(input_qubit[1])
        prog.cx(input_qubit[0], input_qubit[2])
        prog.x(input_qubit[2])
        prog.cx(input_qubit[0], input_qubit[2])
        prog.cx(input_qubit[0], input_qubit[3])
        prog.x(input_qubit[3])
        prog.cx(input_qubit[0], input_qubit[3])
        prog.y(input_qubit[2])
        if (n >= 2):
            prog.mcu1(pi, input_qubit[1:], input_qubit[0])
        prog.x(input_qubit[0])
        prog.x(input_qubit[1])
        prog.x(input_qubit[2])
        prog.x(input_qubit[3])
        prog.h(input_qubit[0])
        prog.h(input_qubit[1])
        prog.h(input_qubit[2])
        prog.h(input_qubit[3])
        prog.h(input_qubit[0])
        prog.h(input_qubit[1])
        prog.h(input_qubit[2])
        prog.h(input_qubit[3])
    for i in range(n):
        prog.measure(input_qubit[i], classical[i])
    return prog
def make_circuit(n: int, f) -> QuantumCircuit:
    input_qubit = QuantumRegister(n, 'qc')
    classical = ClassicalRegister(n, 'qm')
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0])
    prog.h(input_qubit[1])
    prog.h(input_qubit[2])
    prog.h(input_qubit[3])
    prog.cx(input_qubit[4], input_qubit[0])
    prog.h(input_qubit[0])
    prog.cz(input_qubit[4], input_qubit[0])
    prog.h(input_qubit[0])
    prog.z(input_qubit[4])
    prog.cx(input_qubit[4], input_qubit[0])
    prog.cx(input_qubit[4], input_qubit[0])
    prog.h(input_qubit[4])
    Zf = build_oracle(n, f)
    repeat = floor(((sqrt((2 ** n)) * pi) / 4))
    for i in range(1):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])
        prog.h(input_qubit[1])
        prog.h(input_qubit[2])
        prog.cx(input_qubit[1], input_qubit[2])
        prog.h(input_qubit[3])
        prog.x(input_qubit[0])
        prog.x(input_qubit[1])
        prog.cx(input_qubit[0], input_qubit[2])
        prog.x(input_qubit[2])
        prog.cx(input_qubit[0], input_qubit[2])
        prog.cx(input_qubit[0], input_qubit[3])
        prog.x(input_qubit[3])
        prog.cx(input_qubit[0], input_qubit[3])
        prog.y(input_qubit[2])
        if (n >= 2):
            prog.mcu1(pi, input_qubit[1:], input_qubit[0])
        prog.x(input_qubit[0])
        prog.x(input_qubit[1])
        prog.x(input_qubit[2])
        prog.x(input_qubit[3])
        prog.h(input_qubit[0])
        prog.h(input_qubit[1])
        prog.h(input_qubit[2])
        prog.h(input_qubit[3])
        prog.h(input_qubit[0])
        prog.h(input_qubit[1])
        prog.h(input_qubit[2])
        prog.h(input_qubit[3])
    for i in range(n):
        prog.measure(input_qubit[i], classical[i])
    return prog