{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Resource Estimation of Fixed Circuit Used in Tensor Network Contraction Simulation\n",
    "\n",
    "This notebook gives the resource estimation of random quantum circuits used for the tensor network contraction simulation in\n",
    "[Alibaba Cloud Quantum Development Platform: Large-Scale Classical Simulation of Quantum Circuits](https://arxiv.org/abs/1907.11217)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qdk import qsharp"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Encoding a circuit\n",
    "\n",
    "Let's now create a Q# program encoding one the 70-qubit circuits of depth 40 described in \n",
    "https://github.com/sboixo/GRCS/tree/master/inst/bristlecone/cz_v2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "microsoft": {
     "language": "qsharp"
    },
    "vscode": {
     "languageId": "qsharp"
    }
   },
   "outputs": [],
   "source": [
    "%%qsharp\n",
    "\n",
    "operation SqrtX(q : Qubit) : Unit {\n",
    "    H(q);\n",
    "    S(q);\n",
    "    H(q);\n",
    "}\n",
    "\n",
    "operation SqrtY(q : Qubit) : Unit {\n",
    "    Adjoint S(q);\n",
    "    H(q);\n",
    "    S(q);\n",
    "    H(q);\n",
    "    S(q);\n",
    "}\n",
    "\n",
    "operation RunHardcodedCircuit() : Unit {\n",
    "    use qs = Qubit[70];\n",
    "    for i in 0 .. 70 - 1 {\n",
    "        H(qs[i]);\n",
    "    }\n",
    "    T(qs[0]);\n",
    "    T(qs[1]);\n",
    "    T(qs[2]);\n",
    "    T(qs[3]);\n",
    "    CZ(qs[4], qs[5]);\n",
    "    T(qs[6]);\n",
    "    CZ(qs[7], qs[8]);\n",
    "    T(qs[9]);\n",
    "    T(qs[10]);\n",
    "    T(qs[11]);\n",
    "    CZ(qs[12], qs[13]);\n",
    "    T(qs[14]);\n",
    "    T(qs[15]);\n",
    "    CZ(qs[16], qs[17]);\n",
    "    T(qs[18]);\n",
    "    T(qs[19]);\n",
    "    T(qs[20]);\n",
    "    T(qs[21]);\n",
    "    T(qs[22]);\n",
    "    CZ(qs[23], qs[24]);\n",
    "    T(qs[25]);\n",
    "    T(qs[26]);\n",
    "    CZ(qs[27], qs[28]);\n",
    "    T(qs[29]);\n",
    "    T(qs[30]);\n",
    "    CZ(qs[31], qs[32]);\n",
    "    T(qs[33]);\n",
    "    T(qs[34]);\n",
    "    CZ(qs[35], qs[36]);\n",
    "    T(qs[37]);\n",
    "    T(qs[38]);\n",
    "    T(qs[39]);\n",
    "    T(qs[40]);\n",
    "    T(qs[41]);\n",
    "    T(qs[42]);\n",
    "    CZ(qs[43], qs[44]);\n",
    "    T(qs[45]);\n",
    "    T(qs[46]);\n",
    "    CZ(qs[47], qs[48]);\n",
    "    T(qs[49]);\n",
    "    CZ(qs[50], qs[51]);\n",
    "    T(qs[52]);\n",
    "    T(qs[53]);\n",
    "    CZ(qs[54], qs[55]);\n",
    "    T(qs[56]);\n",
    "    T(qs[57]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[60]);\n",
    "    T(qs[61]);\n",
    "    T(qs[62]);\n",
    "    T(qs[63]);\n",
    "    T(qs[64]);\n",
    "    T(qs[65]);\n",
    "    CZ(qs[66], qs[67]);\n",
    "    T(qs[68]);\n",
    "    T(qs[69]);\n",
    "    CZ(qs[2], qs[7]);\n",
    "    CZ(qs[4], qs[9]);\n",
    "    SqrtY(qs[5]);\n",
    "    SqrtY(qs[8]);\n",
    "    SqrtX(qs[12]);\n",
    "    CZ(qs[13], qs[22]);\n",
    "    CZ(qs[15], qs[24]);\n",
    "    SqrtX(qs[16]);\n",
    "    CZ(qs[17], qs[26]);\n",
    "    CZ(qs[19], qs[28]);\n",
    "    SqrtY(qs[23]);\n",
    "    SqrtX(qs[27]);\n",
    "    CZ(qs[31], qs[41]);\n",
    "    SqrtY(qs[32]);\n",
    "    CZ(qs[33], qs[43]);\n",
    "    CZ(qs[35], qs[45]);\n",
    "    SqrtX(qs[36]);\n",
    "    CZ(qs[37], qs[47]);\n",
    "    CZ(qs[39], qs[49]);\n",
    "    SqrtX(qs[44]);\n",
    "    SqrtY(qs[48]);\n",
    "    SqrtY(qs[50]);\n",
    "    CZ(qs[51], qs[58]);\n",
    "    CZ(qs[53], qs[60]);\n",
    "    SqrtY(qs[54]);\n",
    "    CZ(qs[55], qs[62]);\n",
    "    SqrtX(qs[59]);\n",
    "    CZ(qs[66], qs[69]);\n",
    "    SqrtY(qs[67]);\n",
    "    CZ(qs[0], qs[1]);\n",
    "    SqrtY(qs[2]);\n",
    "    SqrtX(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtY(qs[7]);\n",
    "    CZ(qs[8], qs[9]);\n",
    "    T(qs[12]);\n",
    "    CZ(qs[13], qs[14]);\n",
    "    SqrtY(qs[15]);\n",
    "    T(qs[16]);\n",
    "    CZ(qs[17], qs[18]);\n",
    "    SqrtY(qs[19]);\n",
    "    CZ(qs[20], qs[21]);\n",
    "    SqrtY(qs[22]);\n",
    "    T(qs[23]);\n",
    "    CZ(qs[24], qs[25]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[27]);\n",
    "    CZ(qs[28], qs[29]);\n",
    "    SqrtY(qs[31]);\n",
    "    CZ(qs[32], qs[33]);\n",
    "    SqrtY(qs[35]);\n",
    "    CZ(qs[36], qs[37]);\n",
    "    SqrtY(qs[39]);\n",
    "    CZ(qs[40], qs[41]);\n",
    "    SqrtX(qs[43]);\n",
    "    CZ(qs[44], qs[45]);\n",
    "    SqrtX(qs[47]);\n",
    "    CZ(qs[48], qs[49]);\n",
    "    T(qs[50]);\n",
    "    CZ(qs[51], qs[52]);\n",
    "    SqrtX(qs[53]);\n",
    "    T(qs[54]);\n",
    "    CZ(qs[55], qs[56]);\n",
    "    SqrtY(qs[58]);\n",
    "    T(qs[59]);\n",
    "    CZ(qs[60], qs[61]);\n",
    "    SqrtY(qs[62]);\n",
    "    SqrtY(qs[66]);\n",
    "    T(qs[67]);\n",
    "    CZ(qs[68], qs[69]);\n",
    "    SqrtX(qs[0]);\n",
    "    CZ(qs[1], qs[4]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[6], qs[13]);\n",
    "    T(qs[7]);\n",
    "    CZ(qs[8], qs[15]);\n",
    "    SqrtY(qs[9]);\n",
    "    CZ(qs[10], qs[17]);\n",
    "    SqrtX(qs[14]);\n",
    "    SqrtY(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtY(qs[20]);\n",
    "    CZ(qs[21], qs[31]);\n",
    "    T(qs[22]);\n",
    "    CZ(qs[23], qs[33]);\n",
    "    SqrtX(qs[24]);\n",
    "    CZ(qs[25], qs[35]);\n",
    "    T(qs[26]);\n",
    "    CZ(qs[27], qs[37]);\n",
    "    SqrtY(qs[28]);\n",
    "    CZ(qs[29], qs[39]);\n",
    "    SqrtX(qs[32]);\n",
    "    SqrtY(qs[36]);\n",
    "    SqrtY(qs[40]);\n",
    "    SqrtX(qs[41]);\n",
    "    CZ(qs[42], qs[51]);\n",
    "    T(qs[43]);\n",
    "    CZ(qs[44], qs[53]);\n",
    "    SqrtX(qs[45]);\n",
    "    CZ(qs[46], qs[55]);\n",
    "    T(qs[47]);\n",
    "    CZ(qs[48], qs[57]);\n",
    "    SqrtY(qs[49]);\n",
    "    SqrtX(qs[52]);\n",
    "    SqrtX(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[64]);\n",
    "    SqrtY(qs[60]);\n",
    "    CZ(qs[61], qs[66]);\n",
    "    T(qs[62]);\n",
    "    SqrtX(qs[68]);\n",
    "    SqrtY(qs[69]);\n",
    "    T(qs[0]);\n",
    "    SqrtX(qs[1]);\n",
    "    CZ(qs[2], qs[3]);\n",
    "    SqrtY(qs[4]);\n",
    "    SqrtY(qs[6]);\n",
    "    SqrtX(qs[8]);\n",
    "    CZ(qs[9], qs[10]);\n",
    "    SqrtX(qs[13]);\n",
    "    CZ(qs[14], qs[15]);\n",
    "    SqrtX(qs[17]);\n",
    "    CZ(qs[18], qs[19]);\n",
    "    T(qs[20]);\n",
    "    CZ(qs[21], qs[22]);\n",
    "    SqrtY(qs[23]);\n",
    "    T(qs[24]);\n",
    "    CZ(qs[25], qs[26]);\n",
    "    SqrtY(qs[27]);\n",
    "    T(qs[28]);\n",
    "    SqrtX(qs[29]);\n",
    "    SqrtY(qs[31]);\n",
    "    T(qs[32]);\n",
    "    CZ(qs[33], qs[34]);\n",
    "    SqrtY(qs[35]);\n",
    "    T(qs[36]);\n",
    "    CZ(qs[37], qs[38]);\n",
    "    SqrtY(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[42]);\n",
    "    SqrtY(qs[44]);\n",
    "    CZ(qs[45], qs[46]);\n",
    "    SqrtY(qs[48]);\n",
    "    T(qs[49]);\n",
    "    SqrtY(qs[51]);\n",
    "    CZ(qs[52], qs[53]);\n",
    "    SqrtY(qs[55]);\n",
    "    CZ(qs[56], qs[57]);\n",
    "    SqrtY(qs[59]);\n",
    "    T(qs[60]);\n",
    "    CZ(qs[61], qs[62]);\n",
    "    CZ(qs[64], qs[65]);\n",
    "    SqrtX(qs[66]);\n",
    "    T(qs[68]);\n",
    "    T(qs[69]);\n",
    "    T(qs[1]);\n",
    "    SqrtY(qs[2]);\n",
    "    CZ(qs[3], qs[8]);\n",
    "    T(qs[4]);\n",
    "    CZ(qs[5], qs[10]);\n",
    "    T(qs[6]);\n",
    "    SqrtX(qs[9]);\n",
    "    CZ(qs[12], qs[21]);\n",
    "    T(qs[13]);\n",
    "    CZ(qs[14], qs[23]);\n",
    "    SqrtY(qs[15]);\n",
    "    CZ(qs[16], qs[25]);\n",
    "    T(qs[17]);\n",
    "    CZ(qs[18], qs[27]);\n",
    "    SqrtX(qs[19]);\n",
    "    SqrtX(qs[22]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[29]);\n",
    "    CZ(qs[30], qs[40]);\n",
    "    T(qs[31]);\n",
    "    CZ(qs[32], qs[42]);\n",
    "    SqrtY(qs[33]);\n",
    "    CZ(qs[34], qs[44]);\n",
    "    T(qs[35]);\n",
    "    CZ(qs[36], qs[46]);\n",
    "    SqrtY(qs[37]);\n",
    "    CZ(qs[38], qs[48]);\n",
    "    T(qs[39]);\n",
    "    SqrtX(qs[41]);\n",
    "    SqrtX(qs[45]);\n",
    "    T(qs[51]);\n",
    "    CZ(qs[52], qs[59]);\n",
    "    SqrtY(qs[53]);\n",
    "    CZ(qs[54], qs[61]);\n",
    "    T(qs[55]);\n",
    "    CZ(qs[56], qs[63]);\n",
    "    SqrtY(qs[57]);\n",
    "    SqrtY(qs[62]);\n",
    "    SqrtY(qs[64]);\n",
    "    CZ(qs[65], qs[68]);\n",
    "    T(qs[66]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[3], qs[4]);\n",
    "    SqrtY(qs[5]);\n",
    "    CZ(qs[6], qs[7]);\n",
    "    SqrtY(qs[8]);\n",
    "    T(qs[9]);\n",
    "    CZ(qs[10], qs[11]);\n",
    "    SqrtY(qs[12]);\n",
    "    SqrtX(qs[14]);\n",
    "    CZ(qs[15], qs[16]);\n",
    "    SqrtY(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtX(qs[21]);\n",
    "    CZ(qs[22], qs[23]);\n",
    "    SqrtY(qs[25]);\n",
    "    CZ(qs[26], qs[27]);\n",
    "    CZ(qs[30], qs[31]);\n",
    "    SqrtY(qs[32]);\n",
    "    T(qs[33]);\n",
    "    CZ(qs[34], qs[35]);\n",
    "    SqrtY(qs[36]);\n",
    "    T(qs[37]);\n",
    "    CZ(qs[38], qs[39]);\n",
    "    SqrtY(qs[40]);\n",
    "    T(qs[41]);\n",
    "    CZ(qs[42], qs[43]);\n",
    "    SqrtY(qs[44]);\n",
    "    T(qs[45]);\n",
    "    CZ(qs[46], qs[47]);\n",
    "    SqrtY(qs[48]);\n",
    "    SqrtX(qs[52]);\n",
    "    CZ(qs[53], qs[54]);\n",
    "    SqrtY(qs[56]);\n",
    "    T(qs[57]);\n",
    "    CZ(qs[58], qs[59]);\n",
    "    SqrtY(qs[61]);\n",
    "    CZ(qs[62], qs[63]);\n",
    "    T(qs[64]);\n",
    "    CZ(qs[65], qs[66]);\n",
    "    SqrtY(qs[68]);\n",
    "    CZ(qs[0], qs[3]);\n",
    "    SqrtY(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtX(qs[6]);\n",
    "    CZ(qs[7], qs[14]);\n",
    "    T(qs[8]);\n",
    "    CZ(qs[9], qs[16]);\n",
    "    SqrtY(qs[10]);\n",
    "    CZ(qs[11], qs[18]);\n",
    "    T(qs[12]);\n",
    "    SqrtX(qs[15]);\n",
    "    CZ(qs[20], qs[30]);\n",
    "    T(qs[21]);\n",
    "    CZ(qs[22], qs[32]);\n",
    "    SqrtY(qs[23]);\n",
    "    CZ(qs[24], qs[34]);\n",
    "    T(qs[25]);\n",
    "    CZ(qs[26], qs[36]);\n",
    "    SqrtY(qs[27]);\n",
    "    CZ(qs[28], qs[38]);\n",
    "    SqrtX(qs[31]);\n",
    "    SqrtY(qs[35]);\n",
    "    SqrtX(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[50]);\n",
    "    SqrtX(qs[42]);\n",
    "    CZ(qs[43], qs[52]);\n",
    "    T(qs[44]);\n",
    "    CZ(qs[45], qs[54]);\n",
    "    SqrtY(qs[46]);\n",
    "    CZ(qs[47], qs[56]);\n",
    "    T(qs[48]);\n",
    "    SqrtX(qs[53]);\n",
    "    SqrtY(qs[58]);\n",
    "    SqrtX(qs[59]);\n",
    "    CZ(qs[60], qs[65]);\n",
    "    T(qs[61]);\n",
    "    CZ(qs[62], qs[67]);\n",
    "    SqrtX(qs[63]);\n",
    "    SqrtY(qs[66]);\n",
    "    T(qs[68]);\n",
    "    SqrtX(qs[0]);\n",
    "    SqrtY(qs[3]);\n",
    "    CZ(qs[4], qs[5]);\n",
    "    T(qs[6]);\n",
    "    CZ(qs[7], qs[8]);\n",
    "    SqrtY(qs[9]);\n",
    "    T(qs[10]);\n",
    "    SqrtY(qs[11]);\n",
    "    CZ(qs[12], qs[13]);\n",
    "    SqrtY(qs[14]);\n",
    "    T(qs[15]);\n",
    "    CZ(qs[16], qs[17]);\n",
    "    SqrtX(qs[18]);\n",
    "    SqrtY(qs[20]);\n",
    "    SqrtY(qs[22]);\n",
    "    CZ(qs[23], qs[24]);\n",
    "    SqrtY(qs[26]);\n",
    "    CZ(qs[27], qs[28]);\n",
    "    SqrtX(qs[30]);\n",
    "    CZ(qs[31], qs[32]);\n",
    "    SqrtX(qs[34]);\n",
    "    CZ(qs[35], qs[36]);\n",
    "    SqrtY(qs[38]);\n",
    "    T(qs[39]);\n",
    "    SqrtX(qs[41]);\n",
    "    T(qs[42]);\n",
    "    CZ(qs[43], qs[44]);\n",
    "    SqrtX(qs[45]);\n",
    "    T(qs[46]);\n",
    "    CZ(qs[47], qs[48]);\n",
    "    CZ(qs[50], qs[51]);\n",
    "    SqrtY(qs[52]);\n",
    "    T(qs[53]);\n",
    "    CZ(qs[54], qs[55]);\n",
    "    SqrtX(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[60]);\n",
    "    SqrtX(qs[62]);\n",
    "    T(qs[63]);\n",
    "    SqrtX(qs[65]);\n",
    "    CZ(qs[66], qs[67]);\n",
    "    T(qs[0]);\n",
    "    CZ(qs[2], qs[7]);\n",
    "    T(qs[3]);\n",
    "    CZ(qs[4], qs[9]);\n",
    "    SqrtY(qs[5]);\n",
    "    SqrtY(qs[8]);\n",
    "    T(qs[11]);\n",
    "    SqrtX(qs[12]);\n",
    "    CZ(qs[13], qs[22]);\n",
    "    T(qs[14]);\n",
    "    CZ(qs[15], qs[24]);\n",
    "    SqrtX(qs[16]);\n",
    "    CZ(qs[17], qs[26]);\n",
    "    T(qs[18]);\n",
    "    CZ(qs[19], qs[28]);\n",
    "    T(qs[20]);\n",
    "    SqrtX(qs[23]);\n",
    "    SqrtX(qs[27]);\n",
    "    T(qs[30]);\n",
    "    CZ(qs[31], qs[41]);\n",
    "    SqrtX(qs[32]);\n",
    "    CZ(qs[33], qs[43]);\n",
    "    T(qs[34]);\n",
    "    CZ(qs[35], qs[45]);\n",
    "    SqrtY(qs[36]);\n",
    "    CZ(qs[37], qs[47]);\n",
    "    T(qs[38]);\n",
    "    CZ(qs[39], qs[49]);\n",
    "    SqrtX(qs[44]);\n",
    "    SqrtX(qs[48]);\n",
    "    SqrtY(qs[50]);\n",
    "    CZ(qs[51], qs[58]);\n",
    "    T(qs[52]);\n",
    "    CZ(qs[53], qs[60]);\n",
    "    SqrtX(qs[54]);\n",
    "    CZ(qs[55], qs[62]);\n",
    "    T(qs[56]);\n",
    "    SqrtX(qs[59]);\n",
    "    T(qs[65]);\n",
    "    CZ(qs[66], qs[69]);\n",
    "    SqrtY(qs[67]);\n",
    "    CZ(qs[0], qs[1]);\n",
    "    SqrtX(qs[2]);\n",
    "    SqrtX(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtY(qs[7]);\n",
    "    CZ(qs[8], qs[9]);\n",
    "    T(qs[12]);\n",
    "    CZ(qs[13], qs[14]);\n",
    "    SqrtY(qs[15]);\n",
    "    T(qs[16]);\n",
    "    CZ(qs[17], qs[18]);\n",
    "    SqrtY(qs[19]);\n",
    "    CZ(qs[20], qs[21]);\n",
    "    SqrtX(qs[22]);\n",
    "    T(qs[23]);\n",
    "    CZ(qs[24], qs[25]);\n",
    "    SqrtY(qs[26]);\n",
    "    T(qs[27]);\n",
    "    CZ(qs[28], qs[29]);\n",
    "    SqrtY(qs[31]);\n",
    "    CZ(qs[32], qs[33]);\n",
    "    SqrtX(qs[35]);\n",
    "    CZ(qs[36], qs[37]);\n",
    "    SqrtY(qs[39]);\n",
    "    CZ(qs[40], qs[41]);\n",
    "    SqrtY(qs[43]);\n",
    "    CZ(qs[44], qs[45]);\n",
    "    SqrtX(qs[47]);\n",
    "    CZ(qs[48], qs[49]);\n",
    "    T(qs[50]);\n",
    "    CZ(qs[51], qs[52]);\n",
    "    SqrtX(qs[53]);\n",
    "    T(qs[54]);\n",
    "    CZ(qs[55], qs[56]);\n",
    "    SqrtY(qs[58]);\n",
    "    T(qs[59]);\n",
    "    CZ(qs[60], qs[61]);\n",
    "    SqrtX(qs[62]);\n",
    "    SqrtX(qs[66]);\n",
    "    T(qs[67]);\n",
    "    CZ(qs[68], qs[69]);\n",
    "    SqrtX(qs[0]);\n",
    "    CZ(qs[1], qs[4]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[6], qs[13]);\n",
    "    T(qs[7]);\n",
    "    CZ(qs[8], qs[15]);\n",
    "    SqrtX(qs[9]);\n",
    "    CZ(qs[10], qs[17]);\n",
    "    SqrtY(qs[14]);\n",
    "    SqrtY(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtX(qs[20]);\n",
    "    CZ(qs[21], qs[31]);\n",
    "    T(qs[22]);\n",
    "    CZ(qs[23], qs[33]);\n",
    "    SqrtX(qs[24]);\n",
    "    CZ(qs[25], qs[35]);\n",
    "    T(qs[26]);\n",
    "    CZ(qs[27], qs[37]);\n",
    "    SqrtY(qs[28]);\n",
    "    CZ(qs[29], qs[39]);\n",
    "    SqrtX(qs[32]);\n",
    "    SqrtY(qs[36]);\n",
    "    SqrtX(qs[40]);\n",
    "    SqrtY(qs[41]);\n",
    "    CZ(qs[42], qs[51]);\n",
    "    T(qs[43]);\n",
    "    CZ(qs[44], qs[53]);\n",
    "    SqrtX(qs[45]);\n",
    "    CZ(qs[46], qs[55]);\n",
    "    T(qs[47]);\n",
    "    CZ(qs[48], qs[57]);\n",
    "    SqrtX(qs[49]);\n",
    "    SqrtX(qs[52]);\n",
    "    SqrtX(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[64]);\n",
    "    SqrtY(qs[60]);\n",
    "    CZ(qs[61], qs[66]);\n",
    "    T(qs[62]);\n",
    "    SqrtX(qs[68]);\n",
    "    SqrtX(qs[69]);\n",
    "    T(qs[0]);\n",
    "    SqrtX(qs[1]);\n",
    "    CZ(qs[2], qs[3]);\n",
    "    SqrtY(qs[4]);\n",
    "    SqrtY(qs[6]);\n",
    "    SqrtY(qs[8]);\n",
    "    CZ(qs[9], qs[10]);\n",
    "    SqrtY(qs[13]);\n",
    "    CZ(qs[14], qs[15]);\n",
    "    SqrtX(qs[17]);\n",
    "    CZ(qs[18], qs[19]);\n",
    "    T(qs[20]);\n",
    "    CZ(qs[21], qs[22]);\n",
    "    SqrtX(qs[23]);\n",
    "    T(qs[24]);\n",
    "    CZ(qs[25], qs[26]);\n",
    "    SqrtY(qs[27]);\n",
    "    T(qs[28]);\n",
    "    SqrtX(qs[29]);\n",
    "    SqrtX(qs[31]);\n",
    "    T(qs[32]);\n",
    "    CZ(qs[33], qs[34]);\n",
    "    SqrtX(qs[35]);\n",
    "    T(qs[36]);\n",
    "    CZ(qs[37], qs[38]);\n",
    "    SqrtX(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[42]);\n",
    "    SqrtY(qs[44]);\n",
    "    CZ(qs[45], qs[46]);\n",
    "    SqrtX(qs[48]);\n",
    "    T(qs[49]);\n",
    "    SqrtY(qs[51]);\n",
    "    CZ(qs[52], qs[53]);\n",
    "    SqrtY(qs[55]);\n",
    "    CZ(qs[56], qs[57]);\n",
    "    SqrtX(qs[59]);\n",
    "    T(qs[60]);\n",
    "    CZ(qs[61], qs[62]);\n",
    "    CZ(qs[64], qs[65]);\n",
    "    SqrtX(qs[66]);\n",
    "    T(qs[68]);\n",
    "    T(qs[69]);\n",
    "    T(qs[1]);\n",
    "    SqrtY(qs[2]);\n",
    "    CZ(qs[3], qs[8]);\n",
    "    T(qs[4]);\n",
    "    CZ(qs[5], qs[10]);\n",
    "    T(qs[6]);\n",
    "    SqrtX(qs[9]);\n",
    "    CZ(qs[12], qs[21]);\n",
    "    T(qs[13]);\n",
    "    CZ(qs[14], qs[23]);\n",
    "    SqrtY(qs[15]);\n",
    "    CZ(qs[16], qs[25]);\n",
    "    T(qs[17]);\n",
    "    CZ(qs[18], qs[27]);\n",
    "    SqrtX(qs[19]);\n",
    "    SqrtX(qs[22]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[29]);\n",
    "    CZ(qs[30], qs[40]);\n",
    "    T(qs[31]);\n",
    "    CZ(qs[32], qs[42]);\n",
    "    SqrtX(qs[33]);\n",
    "    CZ(qs[34], qs[44]);\n",
    "    T(qs[35]);\n",
    "    CZ(qs[36], qs[46]);\n",
    "    SqrtY(qs[37]);\n",
    "    CZ(qs[38], qs[48]);\n",
    "    T(qs[39]);\n",
    "    SqrtX(qs[41]);\n",
    "    SqrtY(qs[45]);\n",
    "    T(qs[51]);\n",
    "    CZ(qs[52], qs[59]);\n",
    "    SqrtY(qs[53]);\n",
    "    CZ(qs[54], qs[61]);\n",
    "    T(qs[55]);\n",
    "    CZ(qs[56], qs[63]);\n",
    "    SqrtY(qs[57]);\n",
    "    SqrtX(qs[62]);\n",
    "    SqrtX(qs[64]);\n",
    "    CZ(qs[65], qs[68]);\n",
    "    T(qs[66]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[3], qs[4]);\n",
    "    SqrtX(qs[5]);\n",
    "    CZ(qs[6], qs[7]);\n",
    "    SqrtY(qs[8]);\n",
    "    T(qs[9]);\n",
    "    CZ(qs[10], qs[11]);\n",
    "    SqrtY(qs[12]);\n",
    "    SqrtY(qs[14]);\n",
    "    CZ(qs[15], qs[16]);\n",
    "    SqrtX(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtY(qs[21]);\n",
    "    CZ(qs[22], qs[23]);\n",
    "    SqrtY(qs[25]);\n",
    "    CZ(qs[26], qs[27]);\n",
    "    CZ(qs[30], qs[31]);\n",
    "    SqrtX(qs[32]);\n",
    "    T(qs[33]);\n",
    "    CZ(qs[34], qs[35]);\n",
    "    SqrtY(qs[36]);\n",
    "    T(qs[37]);\n",
    "    CZ(qs[38], qs[39]);\n",
    "    SqrtY(qs[40]);\n",
    "    T(qs[41]);\n",
    "    CZ(qs[42], qs[43]);\n",
    "    SqrtX(qs[44]);\n",
    "    T(qs[45]);\n",
    "    CZ(qs[46], qs[47]);\n",
    "    SqrtY(qs[48]);\n",
    "    SqrtX(qs[52]);\n",
    "    CZ(qs[53], qs[54]);\n",
    "    SqrtX(qs[56]);\n",
    "    T(qs[57]);\n",
    "    CZ(qs[58], qs[59]);\n",
    "    SqrtY(qs[61]);\n",
    "    CZ(qs[62], qs[63]);\n",
    "    T(qs[64]);\n",
    "    CZ(qs[65], qs[66]);\n",
    "    SqrtX(qs[68]);\n",
    "    CZ(qs[0], qs[3]);\n",
    "    SqrtY(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtY(qs[6]);\n",
    "    CZ(qs[7], qs[14]);\n",
    "    T(qs[8]);\n",
    "    CZ(qs[9], qs[16]);\n",
    "    SqrtX(qs[10]);\n",
    "    CZ(qs[11], qs[18]);\n",
    "    T(qs[12]);\n",
    "    SqrtX(qs[15]);\n",
    "    CZ(qs[20], qs[30]);\n",
    "    T(qs[21]);\n",
    "    CZ(qs[22], qs[32]);\n",
    "    SqrtY(qs[23]);\n",
    "    CZ(qs[24], qs[34]);\n",
    "    T(qs[25]);\n",
    "    CZ(qs[26], qs[36]);\n",
    "    SqrtY(qs[27]);\n",
    "    CZ(qs[28], qs[38]);\n",
    "    SqrtX(qs[31]);\n",
    "    SqrtY(qs[35]);\n",
    "    SqrtX(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[50]);\n",
    "    SqrtY(qs[42]);\n",
    "    CZ(qs[43], qs[52]);\n",
    "    T(qs[44]);\n",
    "    CZ(qs[45], qs[54]);\n",
    "    SqrtX(qs[46]);\n",
    "    CZ(qs[47], qs[56]);\n",
    "    T(qs[48]);\n",
    "    SqrtX(qs[53]);\n",
    "    SqrtX(qs[58]);\n",
    "    SqrtX(qs[59]);\n",
    "    CZ(qs[60], qs[65]);\n",
    "    T(qs[61]);\n",
    "    CZ(qs[62], qs[67]);\n",
    "    SqrtY(qs[63]);\n",
    "    SqrtY(qs[66]);\n",
    "    T(qs[68]);\n",
    "    SqrtX(qs[0]);\n",
    "    SqrtY(qs[3]);\n",
    "    CZ(qs[4], qs[5]);\n",
    "    T(qs[6]);\n",
    "    CZ(qs[7], qs[8]);\n",
    "    SqrtY(qs[9]);\n",
    "    T(qs[10]);\n",
    "    SqrtX(qs[11]);\n",
    "    CZ(qs[12], qs[13]);\n",
    "    SqrtY(qs[14]);\n",
    "    T(qs[15]);\n",
    "    CZ(qs[16], qs[17]);\n",
    "    SqrtX(qs[18]);\n",
    "    SqrtX(qs[20]);\n",
    "    SqrtX(qs[22]);\n",
    "    CZ(qs[23], qs[24]);\n",
    "    SqrtY(qs[26]);\n",
    "    CZ(qs[27], qs[28]);\n",
    "    SqrtY(qs[30]);\n",
    "    CZ(qs[31], qs[32]);\n",
    "    SqrtY(qs[34]);\n",
    "    CZ(qs[35], qs[36]);\n",
    "    SqrtY(qs[38]);\n",
    "    T(qs[39]);\n",
    "    SqrtY(qs[41]);\n",
    "    T(qs[42]);\n",
    "    CZ(qs[43], qs[44]);\n",
    "    SqrtX(qs[45]);\n",
    "    T(qs[46]);\n",
    "    CZ(qs[47], qs[48]);\n",
    "    CZ(qs[50], qs[51]);\n",
    "    SqrtY(qs[52]);\n",
    "    T(qs[53]);\n",
    "    CZ(qs[54], qs[55]);\n",
    "    SqrtY(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[60]);\n",
    "    SqrtY(qs[62]);\n",
    "    T(qs[63]);\n",
    "    SqrtY(qs[65]);\n",
    "    CZ(qs[66], qs[67]);\n",
    "    T(qs[0]);\n",
    "    CZ(qs[2], qs[7]);\n",
    "    T(qs[3]);\n",
    "    CZ(qs[4], qs[9]);\n",
    "    SqrtY(qs[5]);\n",
    "    SqrtY(qs[8]);\n",
    "    T(qs[11]);\n",
    "    SqrtX(qs[12]);\n",
    "    CZ(qs[13], qs[22]);\n",
    "    T(qs[14]);\n",
    "    CZ(qs[15], qs[24]);\n",
    "    SqrtY(qs[16]);\n",
    "    CZ(qs[17], qs[26]);\n",
    "    T(qs[18]);\n",
    "    CZ(qs[19], qs[28]);\n",
    "    T(qs[20]);\n",
    "    SqrtX(qs[23]);\n",
    "    SqrtY(qs[27]);\n",
    "    T(qs[30]);\n",
    "    CZ(qs[31], qs[41]);\n",
    "    SqrtX(qs[32]);\n",
    "    CZ(qs[33], qs[43]);\n",
    "    T(qs[34]);\n",
    "    CZ(qs[35], qs[45]);\n",
    "    SqrtX(qs[36]);\n",
    "    CZ(qs[37], qs[47]);\n",
    "    T(qs[38]);\n",
    "    CZ(qs[39], qs[49]);\n",
    "    SqrtX(qs[44]);\n",
    "    SqrtY(qs[48]);\n",
    "    SqrtY(qs[50]);\n",
    "    CZ(qs[51], qs[58]);\n",
    "    T(qs[52]);\n",
    "    CZ(qs[53], qs[60]);\n",
    "    SqrtX(qs[54]);\n",
    "    CZ(qs[55], qs[62]);\n",
    "    T(qs[56]);\n",
    "    SqrtY(qs[59]);\n",
    "    T(qs[65]);\n",
    "    CZ(qs[66], qs[69]);\n",
    "    SqrtX(qs[67]);\n",
    "    CZ(qs[0], qs[1]);\n",
    "    SqrtX(qs[2]);\n",
    "    SqrtY(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtX(qs[7]);\n",
    "    CZ(qs[8], qs[9]);\n",
    "    T(qs[12]);\n",
    "    CZ(qs[13], qs[14]);\n",
    "    SqrtX(qs[15]);\n",
    "    T(qs[16]);\n",
    "    CZ(qs[17], qs[18]);\n",
    "    SqrtY(qs[19]);\n",
    "    CZ(qs[20], qs[21]);\n",
    "    SqrtX(qs[22]);\n",
    "    T(qs[23]);\n",
    "    CZ(qs[24], qs[25]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[27]);\n",
    "    CZ(qs[28], qs[29]);\n",
    "    SqrtX(qs[31]);\n",
    "    CZ(qs[32], qs[33]);\n",
    "    SqrtX(qs[35]);\n",
    "    CZ(qs[36], qs[37]);\n",
    "    SqrtX(qs[39]);\n",
    "    CZ(qs[40], qs[41]);\n",
    "    SqrtY(qs[43]);\n",
    "    CZ(qs[44], qs[45]);\n",
    "    SqrtX(qs[47]);\n",
    "    CZ(qs[48], qs[49]);\n",
    "    T(qs[50]);\n",
    "    CZ(qs[51], qs[52]);\n",
    "    SqrtX(qs[53]);\n",
    "    T(qs[54]);\n",
    "    CZ(qs[55], qs[56]);\n",
    "    SqrtX(qs[58]);\n",
    "    T(qs[59]);\n",
    "    CZ(qs[60], qs[61]);\n",
    "    SqrtX(qs[62]);\n",
    "    SqrtX(qs[66]);\n",
    "    T(qs[67]);\n",
    "    CZ(qs[68], qs[69]);\n",
    "    SqrtY(qs[0]);\n",
    "    CZ(qs[1], qs[4]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[6], qs[13]);\n",
    "    T(qs[7]);\n",
    "    CZ(qs[8], qs[15]);\n",
    "    SqrtX(qs[9]);\n",
    "    CZ(qs[10], qs[17]);\n",
    "    SqrtY(qs[14]);\n",
    "    SqrtY(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtX(qs[20]);\n",
    "    CZ(qs[21], qs[31]);\n",
    "    T(qs[22]);\n",
    "    CZ(qs[23], qs[33]);\n",
    "    SqrtX(qs[24]);\n",
    "    CZ(qs[25], qs[35]);\n",
    "    T(qs[26]);\n",
    "    CZ(qs[27], qs[37]);\n",
    "    SqrtY(qs[28]);\n",
    "    CZ(qs[29], qs[39]);\n",
    "    SqrtX(qs[32]);\n",
    "    SqrtX(qs[36]);\n",
    "    SqrtY(qs[40]);\n",
    "    SqrtY(qs[41]);\n",
    "    CZ(qs[42], qs[51]);\n",
    "    T(qs[43]);\n",
    "    CZ(qs[44], qs[53]);\n",
    "    SqrtY(qs[45]);\n",
    "    CZ(qs[46], qs[55]);\n",
    "    T(qs[47]);\n",
    "    CZ(qs[48], qs[57]);\n",
    "    SqrtY(qs[49]);\n",
    "    SqrtX(qs[52]);\n",
    "    SqrtY(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[64]);\n",
    "    SqrtY(qs[60]);\n",
    "    CZ(qs[61], qs[66]);\n",
    "    T(qs[62]);\n",
    "    SqrtX(qs[68]);\n",
    "    SqrtX(qs[69]);\n",
    "    T(qs[0]);\n",
    "    SqrtY(qs[1]);\n",
    "    CZ(qs[2], qs[3]);\n",
    "    SqrtX(qs[4]);\n",
    "    SqrtX(qs[6]);\n",
    "    SqrtX(qs[8]);\n",
    "    CZ(qs[9], qs[10]);\n",
    "    SqrtY(qs[13]);\n",
    "    CZ(qs[14], qs[15]);\n",
    "    SqrtX(qs[17]);\n",
    "    CZ(qs[18], qs[19]);\n",
    "    T(qs[20]);\n",
    "    CZ(qs[21], qs[22]);\n",
    "    SqrtX(qs[23]);\n",
    "    T(qs[24]);\n",
    "    CZ(qs[25], qs[26]);\n",
    "    SqrtY(qs[27]);\n",
    "    T(qs[28]);\n",
    "    SqrtY(qs[29]);\n",
    "    SqrtX(qs[31]);\n",
    "    T(qs[32]);\n",
    "    CZ(qs[33], qs[34]);\n",
    "    SqrtX(qs[35]);\n",
    "    T(qs[36]);\n",
    "    CZ(qs[37], qs[38]);\n",
    "    SqrtY(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[42]);\n",
    "    SqrtX(qs[44]);\n",
    "    CZ(qs[45], qs[46]);\n",
    "    SqrtY(qs[48]);\n",
    "    T(qs[49]);\n",
    "    SqrtX(qs[51]);\n",
    "    CZ(qs[52], qs[53]);\n",
    "    SqrtX(qs[55]);\n",
    "    CZ(qs[56], qs[57]);\n",
    "    SqrtX(qs[59]);\n",
    "    T(qs[60]);\n",
    "    CZ(qs[61], qs[62]);\n",
    "    CZ(qs[64], qs[65]);\n",
    "    SqrtY(qs[66]);\n",
    "    T(qs[68]);\n",
    "    T(qs[69]);\n",
    "    T(qs[1]);\n",
    "    SqrtY(qs[2]);\n",
    "    CZ(qs[3], qs[8]);\n",
    "    T(qs[4]);\n",
    "    CZ(qs[5], qs[10]);\n",
    "    T(qs[6]);\n",
    "    SqrtY(qs[9]);\n",
    "    CZ(qs[12], qs[21]);\n",
    "    T(qs[13]);\n",
    "    CZ(qs[14], qs[23]);\n",
    "    SqrtX(qs[15]);\n",
    "    CZ(qs[16], qs[25]);\n",
    "    T(qs[17]);\n",
    "    CZ(qs[18], qs[27]);\n",
    "    SqrtY(qs[19]);\n",
    "    SqrtX(qs[22]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[29]);\n",
    "    CZ(qs[30], qs[40]);\n",
    "    T(qs[31]);\n",
    "    CZ(qs[32], qs[42]);\n",
    "    SqrtX(qs[33]);\n",
    "    CZ(qs[34], qs[44]);\n",
    "    T(qs[35]);\n",
    "    CZ(qs[36], qs[46]);\n",
    "    SqrtX(qs[37]);\n",
    "    CZ(qs[38], qs[48]);\n",
    "    T(qs[39]);\n",
    "    SqrtY(qs[41]);\n",
    "    SqrtX(qs[45]);\n",
    "    T(qs[51]);\n",
    "    CZ(qs[52], qs[59]);\n",
    "    SqrtX(qs[53]);\n",
    "    CZ(qs[54], qs[61]);\n",
    "    T(qs[55]);\n",
    "    CZ(qs[56], qs[63]);\n",
    "    SqrtX(qs[57]);\n",
    "    SqrtX(qs[62]);\n",
    "    SqrtY(qs[64]);\n",
    "    CZ(qs[65], qs[68]);\n",
    "    T(qs[66]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[3], qs[4]);\n",
    "    SqrtX(qs[5]);\n",
    "    CZ(qs[6], qs[7]);\n",
    "    SqrtY(qs[8]);\n",
    "    T(qs[9]);\n",
    "    CZ(qs[10], qs[11]);\n",
    "    SqrtY(qs[12]);\n",
    "    SqrtX(qs[14]);\n",
    "    CZ(qs[15], qs[16]);\n",
    "    SqrtX(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtY(qs[21]);\n",
    "    CZ(qs[22], qs[23]);\n",
    "    SqrtY(qs[25]);\n",
    "    CZ(qs[26], qs[27]);\n",
    "    CZ(qs[30], qs[31]);\n",
    "    SqrtX(qs[32]);\n",
    "    T(qs[33]);\n",
    "    CZ(qs[34], qs[35]);\n",
    "    SqrtY(qs[36]);\n",
    "    T(qs[37]);\n",
    "    CZ(qs[38], qs[39]);\n",
    "    SqrtX(qs[40]);\n",
    "    T(qs[41]);\n",
    "    CZ(qs[42], qs[43]);\n",
    "    SqrtX(qs[44]);\n",
    "    T(qs[45]);\n",
    "    CZ(qs[46], qs[47]);\n",
    "    SqrtX(qs[48]);\n",
    "    SqrtY(qs[52]);\n",
    "    CZ(qs[53], qs[54]);\n",
    "    SqrtX(qs[56]);\n",
    "    T(qs[57]);\n",
    "    CZ(qs[58], qs[59]);\n",
    "    SqrtY(qs[61]);\n",
    "    CZ(qs[62], qs[63]);\n",
    "    T(qs[64]);\n",
    "    CZ(qs[65], qs[66]);\n",
    "    SqrtX(qs[68]);\n",
    "    CZ(qs[0], qs[3]);\n",
    "    SqrtX(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtY(qs[6]);\n",
    "    CZ(qs[7], qs[14]);\n",
    "    T(qs[8]);\n",
    "    CZ(qs[9], qs[16]);\n",
    "    SqrtY(qs[10]);\n",
    "    CZ(qs[11], qs[18]);\n",
    "    T(qs[12]);\n",
    "    SqrtY(qs[15]);\n",
    "    CZ(qs[20], qs[30]);\n",
    "    T(qs[21]);\n",
    "    CZ(qs[22], qs[32]);\n",
    "    SqrtX(qs[23]);\n",
    "    CZ(qs[24], qs[34]);\n",
    "    T(qs[25]);\n",
    "    CZ(qs[26], qs[36]);\n",
    "    SqrtX(qs[27]);\n",
    "    CZ(qs[28], qs[38]);\n",
    "    SqrtX(qs[31]);\n",
    "    SqrtY(qs[35]);\n",
    "    SqrtY(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[50]);\n",
    "    SqrtY(qs[42]);\n",
    "    CZ(qs[43], qs[52]);\n",
    "    T(qs[44]);\n",
    "    CZ(qs[45], qs[54]);\n",
    "    SqrtY(qs[46]);\n",
    "    CZ(qs[47], qs[56]);\n",
    "    T(qs[48]);\n",
    "    SqrtY(qs[53]);\n",
    "    SqrtX(qs[58]);\n",
    "    SqrtX(qs[59]);\n",
    "    CZ(qs[60], qs[65]);\n",
    "    T(qs[61]);\n",
    "    CZ(qs[62], qs[67]);\n",
    "    SqrtY(qs[63]);\n",
    "    SqrtX(qs[66]);\n",
    "    T(qs[68]);\n",
    "    SqrtX(qs[0]);\n",
    "    SqrtX(qs[3]);\n",
    "    CZ(qs[4], qs[5]);\n",
    "    T(qs[6]);\n",
    "    CZ(qs[7], qs[8]);\n",
    "    SqrtX(qs[9]);\n",
    "    T(qs[10]);\n",
    "    SqrtY(qs[11]);\n",
    "    CZ(qs[12], qs[13]);\n",
    "    SqrtX(qs[14]);\n",
    "    T(qs[15]);\n",
    "    CZ(qs[16], qs[17]);\n",
    "    SqrtX(qs[18]);\n",
    "    SqrtX(qs[20]);\n",
    "    SqrtY(qs[22]);\n",
    "    CZ(qs[23], qs[24]);\n",
    "    SqrtY(qs[26]);\n",
    "    CZ(qs[27], qs[28]);\n",
    "    SqrtY(qs[30]);\n",
    "    CZ(qs[31], qs[32]);\n",
    "    SqrtY(qs[34]);\n",
    "    CZ(qs[35], qs[36]);\n",
    "    SqrtY(qs[38]);\n",
    "    T(qs[39]);\n",
    "    SqrtY(qs[41]);\n",
    "    T(qs[42]);\n",
    "    CZ(qs[43], qs[44]);\n",
    "    SqrtY(qs[45]);\n",
    "    T(qs[46]);\n",
    "    CZ(qs[47], qs[48]);\n",
    "    CZ(qs[50], qs[51]);\n",
    "    SqrtY(qs[52]);\n",
    "    T(qs[53]);\n",
    "    CZ(qs[54], qs[55]);\n",
    "    SqrtY(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[60]);\n",
    "    SqrtY(qs[62]);\n",
    "    T(qs[63]);\n",
    "    SqrtY(qs[65]);\n",
    "    CZ(qs[66], qs[67]);\n",
    "    T(qs[0]);\n",
    "    CZ(qs[2], qs[7]);\n",
    "    T(qs[3]);\n",
    "    CZ(qs[4], qs[9]);\n",
    "    SqrtY(qs[5]);\n",
    "    SqrtX(qs[8]);\n",
    "    T(qs[11]);\n",
    "    SqrtY(qs[12]);\n",
    "    CZ(qs[13], qs[22]);\n",
    "    T(qs[14]);\n",
    "    CZ(qs[15], qs[24]);\n",
    "    SqrtY(qs[16]);\n",
    "    CZ(qs[17], qs[26]);\n",
    "    T(qs[18]);\n",
    "    CZ(qs[19], qs[28]);\n",
    "    T(qs[20]);\n",
    "    SqrtY(qs[23]);\n",
    "    SqrtX(qs[27]);\n",
    "    T(qs[30]);\n",
    "    CZ(qs[31], qs[41]);\n",
    "    SqrtY(qs[32]);\n",
    "    CZ(qs[33], qs[43]);\n",
    "    T(qs[34]);\n",
    "    CZ(qs[35], qs[45]);\n",
    "    SqrtX(qs[36]);\n",
    "    CZ(qs[37], qs[47]);\n",
    "    T(qs[38]);\n",
    "    CZ(qs[39], qs[49]);\n",
    "    SqrtY(qs[44]);\n",
    "    SqrtY(qs[48]);\n",
    "    SqrtY(qs[50]);\n",
    "    CZ(qs[51], qs[58]);\n",
    "    T(qs[52]);\n",
    "    CZ(qs[53], qs[60]);\n",
    "    SqrtY(qs[54]);\n",
    "    CZ(qs[55], qs[62]);\n",
    "    T(qs[56]);\n",
    "    SqrtX(qs[59]);\n",
    "    T(qs[65]);\n",
    "    CZ(qs[66], qs[69]);\n",
    "    SqrtX(qs[67]);\n",
    "    CZ(qs[0], qs[1]);\n",
    "    SqrtY(qs[2]);\n",
    "    SqrtX(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtX(qs[7]);\n",
    "    CZ(qs[8], qs[9]);\n",
    "    T(qs[12]);\n",
    "    CZ(qs[13], qs[14]);\n",
    "    SqrtY(qs[15]);\n",
    "    T(qs[16]);\n",
    "    CZ(qs[17], qs[18]);\n",
    "    SqrtY(qs[19]);\n",
    "    CZ(qs[20], qs[21]);\n",
    "    SqrtX(qs[22]);\n",
    "    T(qs[23]);\n",
    "    CZ(qs[24], qs[25]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[27]);\n",
    "    CZ(qs[28], qs[29]);\n",
    "    SqrtY(qs[31]);\n",
    "    CZ(qs[32], qs[33]);\n",
    "    SqrtX(qs[35]);\n",
    "    CZ(qs[36], qs[37]);\n",
    "    SqrtY(qs[39]);\n",
    "    CZ(qs[40], qs[41]);\n",
    "    SqrtX(qs[43]);\n",
    "    CZ(qs[44], qs[45]);\n",
    "    SqrtX(qs[47]);\n",
    "    CZ(qs[48], qs[49]);\n",
    "    T(qs[50]);\n",
    "    CZ(qs[51], qs[52]);\n",
    "    SqrtY(qs[53]);\n",
    "    T(qs[54]);\n",
    "    CZ(qs[55], qs[56]);\n",
    "    SqrtX(qs[58]);\n",
    "    T(qs[59]);\n",
    "    CZ(qs[60], qs[61]);\n",
    "    SqrtX(qs[62]);\n",
    "    SqrtX(qs[66]);\n",
    "    T(qs[67]);\n",
    "    CZ(qs[68], qs[69]);\n",
    "    SqrtX(qs[0]);\n",
    "    CZ(qs[1], qs[4]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[6], qs[13]);\n",
    "    T(qs[7]);\n",
    "    CZ(qs[8], qs[15]);\n",
    "    SqrtY(qs[9]);\n",
    "    CZ(qs[10], qs[17]);\n",
    "    SqrtY(qs[14]);\n",
    "    SqrtY(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtX(qs[20]);\n",
    "    CZ(qs[21], qs[31]);\n",
    "    T(qs[22]);\n",
    "    CZ(qs[23], qs[33]);\n",
    "    SqrtY(qs[24]);\n",
    "    CZ(qs[25], qs[35]);\n",
    "    T(qs[26]);\n",
    "    CZ(qs[27], qs[37]);\n",
    "    SqrtX(qs[28]);\n",
    "    CZ(qs[29], qs[39]);\n",
    "    SqrtY(qs[32]);\n",
    "    SqrtX(qs[36]);\n",
    "    SqrtX(qs[40]);\n",
    "    SqrtX(qs[41]);\n",
    "    CZ(qs[42], qs[51]);\n",
    "    T(qs[43]);\n",
    "    CZ(qs[44], qs[53]);\n",
    "    SqrtX(qs[45]);\n",
    "    CZ(qs[46], qs[55]);\n",
    "    T(qs[47]);\n",
    "    CZ(qs[48], qs[57]);\n",
    "    SqrtX(qs[49]);\n",
    "    SqrtY(qs[52]);\n",
    "    SqrtY(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[64]);\n",
    "    SqrtX(qs[60]);\n",
    "    CZ(qs[61], qs[66]);\n",
    "    T(qs[62]);\n",
    "    SqrtY(qs[68]);\n",
    "    SqrtX(qs[69]);\n",
    "    T(qs[0]);\n",
    "    SqrtX(qs[1]);\n",
    "    CZ(qs[2], qs[3]);\n",
    "    SqrtY(qs[4]);\n",
    "    SqrtX(qs[6]);\n",
    "    SqrtY(qs[8]);\n",
    "    CZ(qs[9], qs[10]);\n",
    "    SqrtY(qs[13]);\n",
    "    CZ(qs[14], qs[15]);\n",
    "    SqrtX(qs[17]);\n",
    "    CZ(qs[18], qs[19]);\n",
    "    T(qs[20]);\n",
    "    CZ(qs[21], qs[22]);\n",
    "    SqrtY(qs[23]);\n",
    "    T(qs[24]);\n",
    "    CZ(qs[25], qs[26]);\n",
    "    SqrtX(qs[27]);\n",
    "    T(qs[28]);\n",
    "    SqrtX(qs[29]);\n",
    "    SqrtY(qs[31]);\n",
    "    T(qs[32]);\n",
    "    CZ(qs[33], qs[34]);\n",
    "    SqrtY(qs[35]);\n",
    "    T(qs[36]);\n",
    "    CZ(qs[37], qs[38]);\n",
    "    SqrtY(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[42]);\n",
    "    SqrtX(qs[44]);\n",
    "    CZ(qs[45], qs[46]);\n",
    "    SqrtY(qs[48]);\n",
    "    T(qs[49]);\n",
    "    SqrtY(qs[51]);\n",
    "    CZ(qs[52], qs[53]);\n",
    "    SqrtY(qs[55]);\n",
    "    CZ(qs[56], qs[57]);\n",
    "    SqrtY(qs[59]);\n",
    "    T(qs[60]);\n",
    "    CZ(qs[61], qs[62]);\n",
    "    CZ(qs[64], qs[65]);\n",
    "    SqrtY(qs[66]);\n",
    "    T(qs[68]);\n",
    "    T(qs[69]);\n",
    "    T(qs[1]);\n",
    "    SqrtY(qs[2]);\n",
    "    CZ(qs[3], qs[8]);\n",
    "    T(qs[4]);\n",
    "    CZ(qs[5], qs[10]);\n",
    "    T(qs[6]);\n",
    "    SqrtY(qs[9]);\n",
    "    CZ(qs[12], qs[21]);\n",
    "    T(qs[13]);\n",
    "    CZ(qs[14], qs[23]);\n",
    "    SqrtY(qs[15]);\n",
    "    CZ(qs[16], qs[25]);\n",
    "    T(qs[17]);\n",
    "    CZ(qs[18], qs[27]);\n",
    "    SqrtX(qs[19]);\n",
    "    SqrtY(qs[22]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[29]);\n",
    "    CZ(qs[30], qs[40]);\n",
    "    T(qs[31]);\n",
    "    CZ(qs[32], qs[42]);\n",
    "    SqrtY(qs[33]);\n",
    "    CZ(qs[34], qs[44]);\n",
    "    T(qs[35]);\n",
    "    CZ(qs[36], qs[46]);\n",
    "    SqrtX(qs[37]);\n",
    "    CZ(qs[38], qs[48]);\n",
    "    T(qs[39]);\n",
    "    SqrtY(qs[41]);\n",
    "    SqrtX(qs[45]);\n",
    "    T(qs[51]);\n",
    "    CZ(qs[52], qs[59]);\n",
    "    SqrtX(qs[53]);\n",
    "    CZ(qs[54], qs[61]);\n",
    "    T(qs[55]);\n",
    "    CZ(qs[56], qs[63]);\n",
    "    SqrtY(qs[57]);\n",
    "    SqrtX(qs[62]);\n",
    "    SqrtY(qs[64]);\n",
    "    CZ(qs[65], qs[68]);\n",
    "    T(qs[66]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[3], qs[4]);\n",
    "    SqrtY(qs[5]);\n",
    "    CZ(qs[6], qs[7]);\n",
    "    SqrtY(qs[8]);\n",
    "    T(qs[9]);\n",
    "    CZ(qs[10], qs[11]);\n",
    "    SqrtY(qs[12]);\n",
    "    SqrtX(qs[14]);\n",
    "    CZ(qs[15], qs[16]);\n",
    "    SqrtX(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtY(qs[21]);\n",
    "    CZ(qs[22], qs[23]);\n",
    "    SqrtY(qs[25]);\n",
    "    CZ(qs[26], qs[27]);\n",
    "    CZ(qs[30], qs[31]);\n",
    "    SqrtY(qs[32]);\n",
    "    T(qs[33]);\n",
    "    CZ(qs[34], qs[35]);\n",
    "    SqrtY(qs[36]);\n",
    "    T(qs[37]);\n",
    "    CZ(qs[38], qs[39]);\n",
    "    SqrtX(qs[40]);\n",
    "    T(qs[41]);\n",
    "    CZ(qs[42], qs[43]);\n",
    "    SqrtX(qs[44]);\n",
    "    T(qs[45]);\n",
    "    CZ(qs[46], qs[47]);\n",
    "    SqrtX(qs[48]);\n",
    "    SqrtX(qs[52]);\n",
    "    CZ(qs[53], qs[54]);\n",
    "    SqrtY(qs[56]);\n",
    "    T(qs[57]);\n",
    "    CZ(qs[58], qs[59]);\n",
    "    SqrtY(qs[61]);\n",
    "    CZ(qs[62], qs[63]);\n",
    "    T(qs[64]);\n",
    "    CZ(qs[65], qs[66]);\n",
    "    SqrtY(qs[68]);\n",
    "    CZ(qs[0], qs[3]);\n",
    "    SqrtX(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtX(qs[6]);\n",
    "    CZ(qs[7], qs[14]);\n",
    "    T(qs[8]);\n",
    "    CZ(qs[9], qs[16]);\n",
    "    SqrtY(qs[10]);\n",
    "    CZ(qs[11], qs[18]);\n",
    "    T(qs[12]);\n",
    "    SqrtY(qs[15]);\n",
    "    CZ(qs[20], qs[30]);\n",
    "    T(qs[21]);\n",
    "    CZ(qs[22], qs[32]);\n",
    "    SqrtX(qs[23]);\n",
    "    CZ(qs[24], qs[34]);\n",
    "    T(qs[25]);\n",
    "    CZ(qs[26], qs[36]);\n",
    "    SqrtX(qs[27]);\n",
    "    CZ(qs[28], qs[38]);\n",
    "    SqrtY(qs[31]);\n",
    "    SqrtX(qs[35]);\n",
    "    SqrtY(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[50]);\n",
    "    SqrtY(qs[42]);\n",
    "    CZ(qs[43], qs[52]);\n",
    "    T(qs[44]);\n",
    "    CZ(qs[45], qs[54]);\n",
    "    SqrtY(qs[46]);\n",
    "    CZ(qs[47], qs[56]);\n",
    "    T(qs[48]);\n",
    "    SqrtX(qs[53]);\n",
    "    SqrtX(qs[58]);\n",
    "    SqrtX(qs[59]);\n",
    "    CZ(qs[60], qs[65]);\n",
    "    T(qs[61]);\n",
    "    CZ(qs[62], qs[67]);\n",
    "    SqrtX(qs[63]);\n",
    "    SqrtX(qs[66]);\n",
    "    T(qs[68]);\n",
    "    SqrtX(qs[0]);\n",
    "    SqrtY(qs[3]);\n",
    "    CZ(qs[4], qs[5]);\n",
    "    T(qs[6]);\n",
    "    CZ(qs[7], qs[8]);\n",
    "    SqrtY(qs[9]);\n",
    "    T(qs[10]);\n",
    "    SqrtX(qs[11]);\n",
    "    CZ(qs[12], qs[13]);\n",
    "    SqrtY(qs[14]);\n",
    "    T(qs[15]);\n",
    "    CZ(qs[16], qs[17]);\n",
    "    SqrtX(qs[18]);\n",
    "    SqrtX(qs[20]);\n",
    "    SqrtY(qs[22]);\n",
    "    CZ(qs[23], qs[24]);\n",
    "    SqrtY(qs[26]);\n",
    "    CZ(qs[27], qs[28]);\n",
    "    SqrtX(qs[30]);\n",
    "    CZ(qs[31], qs[32]);\n",
    "    SqrtX(qs[34]);\n",
    "    CZ(qs[35], qs[36]);\n",
    "    SqrtX(qs[38]);\n",
    "    T(qs[39]);\n",
    "    SqrtX(qs[41]);\n",
    "    T(qs[42]);\n",
    "    CZ(qs[43], qs[44]);\n",
    "    SqrtY(qs[45]);\n",
    "    T(qs[46]);\n",
    "    CZ(qs[47], qs[48]);\n",
    "    CZ(qs[50], qs[51]);\n",
    "    SqrtY(qs[52]);\n",
    "    T(qs[53]);\n",
    "    CZ(qs[54], qs[55]);\n",
    "    SqrtX(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[60]);\n",
    "    SqrtX(qs[62]);\n",
    "    T(qs[63]);\n",
    "    SqrtX(qs[65]);\n",
    "    CZ(qs[66], qs[67]);\n",
    "    T(qs[0]);\n",
    "    CZ(qs[2], qs[7]);\n",
    "    T(qs[3]);\n",
    "    CZ(qs[4], qs[9]);\n",
    "    SqrtY(qs[5]);\n",
    "    SqrtX(qs[8]);\n",
    "    T(qs[11]);\n",
    "    SqrtY(qs[12]);\n",
    "    CZ(qs[13], qs[22]);\n",
    "    T(qs[14]);\n",
    "    CZ(qs[15], qs[24]);\n",
    "    SqrtX(qs[16]);\n",
    "    CZ(qs[17], qs[26]);\n",
    "    T(qs[18]);\n",
    "    CZ(qs[19], qs[28]);\n",
    "    T(qs[20]);\n",
    "    SqrtX(qs[23]);\n",
    "    SqrtX(qs[27]);\n",
    "    T(qs[30]);\n",
    "    CZ(qs[31], qs[41]);\n",
    "    SqrtY(qs[32]);\n",
    "    CZ(qs[33], qs[43]);\n",
    "    T(qs[34]);\n",
    "    CZ(qs[35], qs[45]);\n",
    "    SqrtY(qs[36]);\n",
    "    CZ(qs[37], qs[47]);\n",
    "    T(qs[38]);\n",
    "    CZ(qs[39], qs[49]);\n",
    "    SqrtY(qs[44]);\n",
    "    SqrtX(qs[48]);\n",
    "    SqrtY(qs[50]);\n",
    "    CZ(qs[51], qs[58]);\n",
    "    T(qs[52]);\n",
    "    CZ(qs[53], qs[60]);\n",
    "    SqrtX(qs[54]);\n",
    "    CZ(qs[55], qs[62]);\n",
    "    T(qs[56]);\n",
    "    SqrtY(qs[59]);\n",
    "    T(qs[65]);\n",
    "    CZ(qs[66], qs[69]);\n",
    "    SqrtX(qs[67]);\n",
    "    CZ(qs[0], qs[1]);\n",
    "    SqrtY(qs[2]);\n",
    "    SqrtY(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtY(qs[7]);\n",
    "    CZ(qs[8], qs[9]);\n",
    "    T(qs[12]);\n",
    "    CZ(qs[13], qs[14]);\n",
    "    SqrtX(qs[15]);\n",
    "    T(qs[16]);\n",
    "    CZ(qs[17], qs[18]);\n",
    "    SqrtX(qs[19]);\n",
    "    CZ(qs[20], qs[21]);\n",
    "    SqrtY(qs[22]);\n",
    "    T(qs[23]);\n",
    "    CZ(qs[24], qs[25]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[27]);\n",
    "    CZ(qs[28], qs[29]);\n",
    "    SqrtX(qs[31]);\n",
    "    CZ(qs[32], qs[33]);\n",
    "    SqrtX(qs[35]);\n",
    "    CZ(qs[36], qs[37]);\n",
    "    SqrtX(qs[39]);\n",
    "    CZ(qs[40], qs[41]);\n",
    "    SqrtX(qs[43]);\n",
    "    CZ(qs[44], qs[45]);\n",
    "    SqrtX(qs[47]);\n",
    "    CZ(qs[48], qs[49]);\n",
    "    T(qs[50]);\n",
    "    CZ(qs[51], qs[52]);\n",
    "    SqrtX(qs[53]);\n",
    "    T(qs[54]);\n",
    "    CZ(qs[55], qs[56]);\n",
    "    SqrtX(qs[58]);\n",
    "    T(qs[59]);\n",
    "    CZ(qs[60], qs[61]);\n",
    "    SqrtY(qs[62]);\n",
    "    SqrtY(qs[66]);\n",
    "    T(qs[67]);\n",
    "    CZ(qs[68], qs[69]);\n",
    "    SqrtX(qs[0]);\n",
    "    CZ(qs[1], qs[4]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[6], qs[13]);\n",
    "    T(qs[7]);\n",
    "    CZ(qs[8], qs[15]);\n",
    "    SqrtX(qs[9]);\n",
    "    CZ(qs[10], qs[17]);\n",
    "    SqrtY(qs[14]);\n",
    "    SqrtX(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtX(qs[20]);\n",
    "    CZ(qs[21], qs[31]);\n",
    "    T(qs[22]);\n",
    "    CZ(qs[23], qs[33]);\n",
    "    SqrtX(qs[24]);\n",
    "    CZ(qs[25], qs[35]);\n",
    "    T(qs[26]);\n",
    "    CZ(qs[27], qs[37]);\n",
    "    SqrtY(qs[28]);\n",
    "    CZ(qs[29], qs[39]);\n",
    "    SqrtX(qs[32]);\n",
    "    SqrtX(qs[36]);\n",
    "    SqrtX(qs[40]);\n",
    "    SqrtY(qs[41]);\n",
    "    CZ(qs[42], qs[51]);\n",
    "    T(qs[43]);\n",
    "    CZ(qs[44], qs[53]);\n",
    "    SqrtX(qs[45]);\n",
    "    CZ(qs[46], qs[55]);\n",
    "    T(qs[47]);\n",
    "    CZ(qs[48], qs[57]);\n",
    "    SqrtX(qs[49]);\n",
    "    SqrtX(qs[52]);\n",
    "    SqrtX(qs[56]);\n",
    "    T(qs[58]);\n",
    "    CZ(qs[59], qs[64]);\n",
    "    SqrtY(qs[60]);\n",
    "    CZ(qs[61], qs[66]);\n",
    "    T(qs[62]);\n",
    "    SqrtY(qs[68]);\n",
    "    SqrtX(qs[69]);\n",
    "    T(qs[0]);\n",
    "    SqrtY(qs[1]);\n",
    "    CZ(qs[2], qs[3]);\n",
    "    SqrtY(qs[4]);\n",
    "    SqrtY(qs[6]);\n",
    "    SqrtX(qs[8]);\n",
    "    CZ(qs[9], qs[10]);\n",
    "    SqrtX(qs[13]);\n",
    "    CZ(qs[14], qs[15]);\n",
    "    SqrtY(qs[17]);\n",
    "    CZ(qs[18], qs[19]);\n",
    "    T(qs[20]);\n",
    "    CZ(qs[21], qs[22]);\n",
    "    SqrtX(qs[23]);\n",
    "    T(qs[24]);\n",
    "    CZ(qs[25], qs[26]);\n",
    "    SqrtX(qs[27]);\n",
    "    T(qs[28]);\n",
    "    SqrtX(qs[29]);\n",
    "    SqrtY(qs[31]);\n",
    "    T(qs[32]);\n",
    "    CZ(qs[33], qs[34]);\n",
    "    SqrtX(qs[35]);\n",
    "    T(qs[36]);\n",
    "    CZ(qs[37], qs[38]);\n",
    "    SqrtX(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[42]);\n",
    "    SqrtY(qs[44]);\n",
    "    CZ(qs[45], qs[46]);\n",
    "    SqrtX(qs[48]);\n",
    "    T(qs[49]);\n",
    "    SqrtX(qs[51]);\n",
    "    CZ(qs[52], qs[53]);\n",
    "    SqrtX(qs[55]);\n",
    "    CZ(qs[56], qs[57]);\n",
    "    SqrtY(qs[59]);\n",
    "    T(qs[60]);\n",
    "    CZ(qs[61], qs[62]);\n",
    "    CZ(qs[64], qs[65]);\n",
    "    SqrtY(qs[66]);\n",
    "    T(qs[68]);\n",
    "    T(qs[69]);\n",
    "    T(qs[1]);\n",
    "    SqrtX(qs[2]);\n",
    "    CZ(qs[3], qs[8]);\n",
    "    T(qs[4]);\n",
    "    CZ(qs[5], qs[10]);\n",
    "    T(qs[6]);\n",
    "    SqrtX(qs[9]);\n",
    "    CZ(qs[12], qs[21]);\n",
    "    T(qs[13]);\n",
    "    CZ(qs[14], qs[23]);\n",
    "    SqrtY(qs[15]);\n",
    "    CZ(qs[16], qs[25]);\n",
    "    T(qs[17]);\n",
    "    CZ(qs[18], qs[27]);\n",
    "    SqrtY(qs[19]);\n",
    "    SqrtY(qs[22]);\n",
    "    SqrtX(qs[26]);\n",
    "    T(qs[29]);\n",
    "    CZ(qs[30], qs[40]);\n",
    "    T(qs[31]);\n",
    "    CZ(qs[32], qs[42]);\n",
    "    SqrtY(qs[33]);\n",
    "    CZ(qs[34], qs[44]);\n",
    "    T(qs[35]);\n",
    "    CZ(qs[36], qs[46]);\n",
    "    SqrtX(qs[37]);\n",
    "    CZ(qs[38], qs[48]);\n",
    "    T(qs[39]);\n",
    "    SqrtY(qs[41]);\n",
    "    SqrtY(qs[45]);\n",
    "    T(qs[51]);\n",
    "    CZ(qs[52], qs[59]);\n",
    "    SqrtX(qs[53]);\n",
    "    CZ(qs[54], qs[61]);\n",
    "    T(qs[55]);\n",
    "    CZ(qs[56], qs[63]);\n",
    "    SqrtY(qs[57]);\n",
    "    SqrtX(qs[62]);\n",
    "    SqrtY(qs[64]);\n",
    "    CZ(qs[65], qs[68]);\n",
    "    T(qs[66]);\n",
    "    T(qs[2]);\n",
    "    CZ(qs[3], qs[4]);\n",
    "    SqrtX(qs[5]);\n",
    "    CZ(qs[6], qs[7]);\n",
    "    SqrtY(qs[8]);\n",
    "    T(qs[9]);\n",
    "    CZ(qs[10], qs[11]);\n",
    "    SqrtX(qs[12]);\n",
    "    SqrtX(qs[14]);\n",
    "    CZ(qs[15], qs[16]);\n",
    "    SqrtY(qs[18]);\n",
    "    T(qs[19]);\n",
    "    SqrtY(qs[21]);\n",
    "    CZ(qs[22], qs[23]);\n",
    "    SqrtX(qs[25]);\n",
    "    CZ(qs[26], qs[27]);\n",
    "    CZ(qs[30], qs[31]);\n",
    "    SqrtX(qs[32]);\n",
    "    T(qs[33]);\n",
    "    CZ(qs[34], qs[35]);\n",
    "    SqrtX(qs[36]);\n",
    "    T(qs[37]);\n",
    "    CZ(qs[38], qs[39]);\n",
    "    SqrtX(qs[40]);\n",
    "    T(qs[41]);\n",
    "    CZ(qs[42], qs[43]);\n",
    "    SqrtY(qs[44]);\n",
    "    T(qs[45]);\n",
    "    CZ(qs[46], qs[47]);\n",
    "    SqrtY(qs[48]);\n",
    "    SqrtY(qs[52]);\n",
    "    CZ(qs[53], qs[54]);\n",
    "    SqrtX(qs[56]);\n",
    "    T(qs[57]);\n",
    "    CZ(qs[58], qs[59]);\n",
    "    SqrtY(qs[61]);\n",
    "    CZ(qs[62], qs[63]);\n",
    "    T(qs[64]);\n",
    "    CZ(qs[65], qs[66]);\n",
    "    SqrtX(qs[68]);\n",
    "    CZ(qs[0], qs[3]);\n",
    "    SqrtX(qs[4]);\n",
    "    T(qs[5]);\n",
    "    SqrtY(qs[6]);\n",
    "    CZ(qs[7], qs[14]);\n",
    "    T(qs[8]);\n",
    "    CZ(qs[9], qs[16]);\n",
    "    SqrtX(qs[10]);\n",
    "    CZ(qs[11], qs[18]);\n",
    "    T(qs[12]);\n",
    "    SqrtY(qs[15]);\n",
    "    CZ(qs[20], qs[30]);\n",
    "    T(qs[21]);\n",
    "    CZ(qs[22], qs[32]);\n",
    "    SqrtX(qs[23]);\n",
    "    CZ(qs[24], qs[34]);\n",
    "    T(qs[25]);\n",
    "    CZ(qs[26], qs[36]);\n",
    "    SqrtX(qs[27]);\n",
    "    CZ(qs[28], qs[38]);\n",
    "    SqrtX(qs[31]);\n",
    "    SqrtY(qs[35]);\n",
    "    SqrtY(qs[39]);\n",
    "    T(qs[40]);\n",
    "    CZ(qs[41], qs[50]);\n",
    "    SqrtY(qs[42]);\n",
    "    CZ(qs[43], qs[52]);\n",
    "    T(qs[44]);\n",
    "    CZ(qs[45], qs[54]);\n",
    "    SqrtY(qs[46]);\n",
    "    CZ(qs[47], qs[56]);\n",
    "    T(qs[48]);\n",
    "    SqrtX(qs[53]);\n",
    "    SqrtY(qs[58]);\n",
    "    SqrtX(qs[59]);\n",
    "    CZ(qs[60], qs[65]);\n",
    "    T(qs[61]);\n",
    "    CZ(qs[62], qs[67]);\n",
    "    SqrtY(qs[63]);\n",
    "    SqrtY(qs[66]);\n",
    "    T(qs[68]);\n",
    "    for i in 0 .. 70 - 1 {\n",
    "        H(qs[i]);\n",
    "    }\n",
    "}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Running the Resource Estimator\n",
    "\n",
    "Now we can estimate the resources required for the generated Q# program."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = qsharp.estimate(\"RunHardcodedCircuit()\")\n",
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false,
     "source_hidden": false
    },
    "nteract": {
     "transient": {
      "deleting": false
     }
    }
   },
   "outputs": [],
   "source": [
    "logical_qubits = result['physicalCounts']['breakdown']['algorithmicLogicalQubits']\n",
    "logical_depth = result['physicalCounts']['breakdown']['algorithmicLogicalDepth']\n",
    "# We take the runtime of the circuit from the paper https://arxiv.org/pdf/1907.11217.pdf, table 1.\n",
    "target_runtime = 580.7\n",
    "target_rqops = logical_qubits * logical_depth / target_runtime\n",
    "\n",
    "print(f\"Logical qubits = {logical_qubits}\")\n",
    "print(f\"Logical depth = {logical_depth}\")\n",
    "print(f\"Target runtime = {target_runtime} seconds\")\n",
    "print(f\"Target rQOPS = {target_rqops}\")\n",
    "\n",
    "print(f\"Execution time on hardware  = {result['physicalCounts']['runtime'] * 1e-9} seconds\")\n",
    "print(f\"rQOPS for execution on hardware = {result['physicalCounts']['rqops']}\")"
   ]
  }
 ],
 "metadata": {
  "kernel_info": {
   "name": "python3"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
