OPENQASM 3.0; input uint n; qubit[n] q; h q[0]; for uint k in [0:n] { for uint i in [0:2**k - 1] { if (2**k < n && i + 2**k < n) { cx q[i], q[i + 2**k]; } } }