Hypermap-Homology Quantum Codes
Martin Leslie
We introduce a new type of sparse CSS quantum error correcting code based on the homology of hypermaps. Sparse quantum error correcting codes are of interest in the building of quantum computers due to their ease of implementation and the possibility of developing fast decoders for them. Codes based on the homology of embeddings of graphs, such as Kitaev's toric code, have been discussed widely in the literature and our class of codes generalize these. We use embedded hypergraphs, which are a generalization of graphs that can have edges connected to more than two vertices. We develop theorems and examples of our hypermap-homology codes, especially in the case that we choose a special type of basis in our homology chain complex. In particular the most straightforward generalization of the $m\times m$ toric code to hypermap-homology codes gives us a $[(3/2)m^2,2,m]$ code as compared to the toric code which is a $[2m^2,2,m]$ code. Thus we can protect the same amount of quantum information, with the same error-correcting capability, using less physical qubits. \
MLdissertation.tex
%\documentclass[draft]{ua-thesis}
\documentclass[final]{ua-thesis}

\usepackage{verbatim}
\usepackage{amssymb,amsmath,amsthm}
\usepackage[mathscr]{eucal}

\usepackage{makeidx}
\makeindex

%\numberwithin{equation}{section}
%\numberwithin{equation}{subsection}
\input{isomath}
\input{mathenv}
\input{syms}
%\usepackage{graphicx}
%\usepackage{psfrag}
%\usepackage{afterpage}
%\usepackage{subfigure}

%\usepackage{ifpdf}

%%THIS IS WHAT I (MARTIN LESLIE) ADDED
\usepackage{bbm}


%the following is some stuff from standard preamble for tikzit
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\pgfdeclarelayer{backgroundlayer}
\pgfdeclarelayer{edgelayer}
\pgfdeclarelayer{nodelayer}
\pgfsetlayers{backgroundlayer,edgelayer,nodelayer,main}
%my tikzit styles
\tikzstyle{none}=[inner sep=0pt]
\tikzstyle{vertex}=[circle,fill=White,draw=Black]
\tikzstyle{edge}=[rectangle,fill=White,draw=Black]
\tikzstyle{dualVertex}=[circle,fill=White,draw=Red]
%end tikzit preamble

\usepackage{tikz-cd}
\allowdisplaybreaks[1]

\setcounter{MaxMatrixCols}{20} %ams style matrices (like bmatrix) can only go up to 10 columns by default.

\usepackage{float}
\usepackage[bookmarks=false]{hyperref} %Internet advice said to do it in this order
\usepackage[all]{hypcap}
\usepackage{algorithm, algorithmic}

%%END WHAT I ADDED

\director{Marek Rychlik}
\author{Martin Leslie}
\title{Hypermap-Homology Quantum Codes}
\date{2013}

\ifpdf
\pdfinfo{
/Author (Martin Leslie)
/Title  (Hypermap-Homology Quantum Codes)
}
\fi

%% ================================================================
\begin{document}

\maketitle

\chapter*{Acknowledgments}
\input{disack.tex}
\chapter*{Dedication}
\thispagestyle{topright}
\begin{center}For my mum and dad.\end{center}

\tableofcontents
\listoffigures
\listoftables

\input{disabs.tex}

\input{disbody.tex}

\printindex

\bibliography{mybib.bib}{}
\bibliographystyle{alpha}


%% ================================================================
\end{document}

disabs.tex
\begin{abstract}

We introduce a new type of sparse CSS quantum error correcting code based on the homology of hypermaps. Sparse quantum error correcting codes are of interest in the building of quantum computers due to their ease of implementation and the possibility of developing fast decoders for them. Codes based on the homology of embeddings of graphs, such as Kitaev's toric code, have been discussed widely in the literature and our class of codes generalize these. We use embedded hypergraphs, which are a generalization of graphs that can have edges connected to more than two vertices.

We develop theorems and examples of our hypermap-homology codes, especially in the case that we choose a special type of basis in our homology chain complex. In particular the most straightforward generalization of the $m\times m$ toric code to hypermap-homology codes gives us a $[(3/2)m^2,2,m]$ code as compared to the toric code which is a $[2m^2,2,m]$ code. Thus we can protect the same amount of quantum information, with the same error-correcting capability, using less physical qubits.

\
\end{abstract}

disack.tex
Thank you to my advisor Marek Rychlik for all his valuable effort and time and to my committee members Klaus Lux, Pham Huu Tiep and Janek Wehr. Thank you to my girlfriend Deborah Shelton, my parents Pat and Michael and my sisters Jillian and Ellen for their support over so many years. Thank you to my friends and colleagues among the graduate students in the mathematics department, especially Enrique Acosta, Michael Bishop, Michael Gilbert, Yaron Hadad, Shane Passon and Sarah Mann.

disbody.tex
% !TEX root = MLdissertation.tex

%% ================================================================

\chapter{Introduction}
\label{chap:introduction}

This dissertation introduces a new type of quantum error correcting code which we will call hypermap-homology quantum codes. We also provide examples and analysis of said codes.

Quantum computers may be able to provide significant speedups over classical computers in certain problems. The most famous example is factoring integers using Shor's algorithm, where the quantum algorithm is exponentially faster than any known classical algorithm. They may also be able to simulate quantum systems faster than classical computers. However quantum noise (such as undesired unitary evolution of a quantum state or undesired measurements) makes building quantum computers difficult. Quantum error correction may be able to provide an answer to these problems. The quantum fault tolerance theorem roughly says that if we can implement quantum gates with error probability per unit of time below some threshold then by concatenating quantum codes (i.e. building sufficiently many layers of quantum error correction into our gates) we can get the error rate arbitrarily low. We will not go into the details of such practicalities, instead looking at quantum stabilizer codes as mathematical objects. See \cite{nielsenquantum} for more information on quantum computing and error correction.

We consider binary CSS (Calderbank-Shor-Steane) codes, a special case of stabilizer codes (see Chapter \ref{chap:background} for definitions and details). CSS codes are defined by two $\F_2$ matrices $H_X, H_Z$ such that $H_XH_Z^T=0$. These codes have parameters $[N,K,D]$ where $K$ information qubits are encoded into $N$ physical qubits with minimum distance $D$. A minimum distance $D$ code can correct any errors on $\lfloor(D-1)/2\rfloor$ qubits.

It was shown non-constructively in \cite{calderbank1996good} that there exist CSS codes with $K/N$ fixed and $D \sim cN$ for a constant $c$. Codes with this property are called \textit{good}. However it is not known if \em sparse \em good CSS codes (codes with $H_X$ and $H_Z$ sparse) exist. Sparse quantum codes are interesting for at least two reasons. The first is that sparse classical codes such as Low Density Parity Check (LDPC) codes are known to have performance as good as any codes while also having efficient suboptimal decoders. Being able to decode quickly is important in applications such as quantum fault tolerance. The second reason is that in physical implementations of quantum codes, the matrices can correspond to connections between the physical qubits. So a sparse quantum code can mean that the qubits are connected to few neighboring qubits which can lead to easier implementation.

 In \cite{kitaev2003fault} a family of sparse codes called toric codes were introduced which have parameters $[2m^2,2,m]$, thus $K$ is fixed and $D \sim (1/\sqrt{2})\sqrt{N}$. Despite their relatively poor performance toric and toric-like codes have promise in that they may be easy to implement and decode as discussed above. In \cite{mackay2004sparse} sparse graph quantum codes inspired by classical LDPC codes were introduced. However the most practically successful class of such codes, the `bicycle codes', are expected to have $D$ bounded above by a constant as $N$ increases.

Codes with growing distance have been suggested in the years since. We summarize some attempts with Table \ref{tab:codes}. In \cite{zemor2009cayley} it was suggested that looking at $KD^2$ may be a way to compare toric-like codes so we include this information also.

\begin{table}[h!]
\centering
\begin{tabular}{ | c | c | c | c |  }
\hline
Code & $K$ & $D$ & $KD^2$ \\
\hline
Good codes \cite{calderbank1996good} & $\sim c_1 N$ & $\sim c_2 N$ & $\sim c_3N^3$\\
Bicycle codes \cite{mackay2004sparse} & $\sim c_1N$ & expect $\leq c_2$ & $\sim c_3N$\\
Toric code \cite{kitaev2003fault} & $2$ & $(1/\sqrt{2})\sqrt{N}$ & $N$\\
Systolic freedom \cite{freedman2002z2}, \cite{fetaya2011homological} & $c_1$ & $\sim c_2\sqrt{N\log{N}}$ & $\sim c_3 N\log{N}$\\
Hypergraph-product \cite{tillich2009quantum}, \cite{kovalev2012improved} & $\sim c_1 N$ & $\sim c_2\sqrt{N}$ & $\sim c_3 N^2$\\
%Projective plane codes \cite{farinholt2012quantum} & unsure & unsure & unsure\\
Cayley graph \cite{zemor2009cayley} & $\sim c_1N$ & $\sim c_2 \log{N}$ & $\sim c_3 N(\log{N})^2$ \\
Cayley graph repetition \cite{couvreur2011construction} & $\sqrt{2}\sqrt{N}$ & $(1/\sqrt{2})\sqrt{N}$ & $(1/\sqrt{2})N^{3/2}$\\
%Tesselations of Platonic surfaces \cite{riemann2011good} & unsure & unsure & unsure\\
%Embeddings of Ramanujan graphs \cite{riemann2011good} & unsure & unsure & unsure\\
\hline
\end{tabular}
\caption[Some code constructions]{Some code constructions.}
\label{tab:codes}
\end{table}

Some results constraining the parameters of toric-like codes have been proved. In \cite{fetaya2011homological} it is shown that codes based on the homology of a fixed surface have a bound $D^2 \leq c N$. Similarly in \cite{bravyi2010tradeoffs} it is shown that for `geometrically local' codes on a 2D lattice we have $KD^2 \leq N$. Another relevant result is Gallager's proof in \cite{gallager1962low} that classical LDPC codes of column weight two cannot have minimum distance $d$ linear with blocklength $n$. This result does not imply that CSS codes with column weight two matrices cannot achieve $D\sim cN$ but it does make it quite unlikely. It is our hope (as yet unrealized) that our codes may be able to avoid these limits.

Hypergraph based quantum codes have been proposed in \cite{tillich2009quantum} (based on products of hypergraphs) and \cite{sarvepalli2012topological}. However to our knowledge no codes based on homology of hypermaps have been suggested before.

Our interest in hypermap-homology codes initially came from considering the existing construction of codes from homology of embeddings of graphs. In these constructions the fact that an edge is connected to only two vertices in classical graphs leads to one of the matrices in the CSS construction having column weight two. Hypermap-homology codes are based on embeddings of hypergraphs - a generalization of graphs where an edge can be connected to more than two vertices. Unfortunately, in our examples we make a choice of basis that does lead to the relevant matrix having column weight two. However our construction is still a generalization of codes based on graph homology and in Example \ref{ex:mbymsquaregrid} we can see that the straightforward generalization of the toric code to hypermap-homology codes has better parameters (it can store the same amount of information, with the same error correction capability, in less qubits). We see this as a proof of concept that hypermap-homology codes can be useful.

We will not discuss decoding of our codes. They are quantum LDPC codes so can be decoded by standard belief propagation techniques as in \cite{mackay2004sparse}. However the example of decoding toric codes show that this may not work particularly well. See for example \cite{duclos2010fast} for specialized techniques that may be able to be extended to hypermap-homology codes.

In Chapter 2 we give the background knowledge required in classical coding theory, quantum mechanics on qubits, and stabilizer codes. In Chapter 3 we give an exposition of how we can create CSS codes from $\F_2$-chain complexes, including from graphs embedded in surfaces and \textit{planar codes} which come from grids in the plane with certain holes removed. In Chapter 4 we give the required background in hypermaps and hypermap homology before introducing hypermap-homology codes and their analysis. Appendix A is a short discussion of computer software that we developed to compute parameters of hypermap-homology codes.

The work in this dissertation that to our knowledge is original is:
\begin{enumerate}
\item an explanation that CSS codes can be constructed from any $\F_2$-chain complex in Section \ref{sec:chainComplex},
\item an exposition of planar codes that fills in some of the more intuitive arguments from the literature in Section \ref{sec:planarCodes},
\item propositions expressing different ways to understand hypermap-homology in Section \ref{sec:hypermapHomology}, and
\item definitions and methods to determine the weight of hypermap-homology codes with a certain type of basis in Sections \ref{sec:hypHomCodes} and \ref{sec:specialBasis}. We also include examples.
\end{enumerate}


%% ================================================================
\chapter{Background}
\label{chap:background}

\section{Classical codes}
Classical information theory and coding theory were initiated by the works of Shannon and Hamming in 1948 and 1950 respectively. This section draws from a number of sources including \cite{nielsenquantum}, \cite{mackay2003information}, \cite{richardson2008modern} and \cite{guruswami2010lecture} to give an introduction to binary linear codes.

Consider the vector space $\F_2^n$ with the non-degenerate symmetric bilinear form 
\[(x,y) \mapsto x\cdot y=\sum_i x_i y_i.\]
We write elements of $\F_2^n$ as column vectors. Define an $[n,k]$ \textit{binary linear code}\index{binary linear code} $C$ to be a $k$-dimensional subspace of $\mathbb{F}_2^n$, with elements of $C$ called \textit{codewords}. We say that $G \in M_{n \times k}(\mathbb{F}_q)$ is a \textit{generator matrix}\index{generator matrix} for $C$ if $C=G(\mathbb{F}_2^k)$. A matrix $H \in M_{m \times n}(\mathbb{F}_2)$ is called a \textit{parity check matrix}\index{parity check matrix} for $C$ if $C=\ker(H)$. Since $G$ is injective we know that $G$ is full rank i.e. $\rank(G)=k$. However, since $\F_2^n/\ker(H)\cong \im(H)$ we have $\dim(\im(H))=n-k$ so with our definition $H$ does not have to be full rank. We allow the parity check matrix to include $m\geq n-k$ conditions of which $m-(n-k)$ must be redundant. This is purely for convenience; many of our code constructions will be via specifying parity check matrices which may not necessarily be full rank.

Furthermore we have $HG=0$ because columns of $G$ are elements of $C$ and $H$ times an element of $C$ is $0$.

To form a generating matrix for a code $C$ choose a basis for $C$ and place these as columns of $G$. Then we can generate all the codewords by adding basis codewords i.e. multiplying $G$ by some $x$.

To form a full rank parity check matrix for $C$ we consider the orthogonal complement 
\[C^\perp=\{y\in \mathbb{F}_2^n \colon y \cdot x = 0 \mbox{ for all } x\in C\},\]
called the \textit{dual code}\index{dual!code} of $C$. One thing to note is that we do not necessarily have $C \cap C^\perp=\{0\}$ (for example even weight codewords are orthogonal to themselves). However our bilinear form is non-degenerate so we do still have
\[\dim(C)+\dim(C^\perp)=\dim(\mathbb{F}_2^n)\]
and thus $\dim(C^\perp)=n-k$. Now choose a basis for $C^\perp$ and use this as the rows of $H$.

To show that $H$ is a parity check matrix for $C$ we need
\[C=\{x \in \mathbb{F}_2^n \colon Hx=0\}.\]
If $x \in C$ then $Hx=0$ because each row of $H$ is orthogonal to all elements of $C$. If $Hx=0$ then we know that $x$ is orthogonal to a basis for $C^\perp$ and is thus orthogonal to $C^\perp$. Thus $x\in (C^\perp)^\perp=C$ (to see this last equality note that $C \subseteq (C^\perp)^\perp$ and that $\dim(C^\perp)+\dim((C^\perp)^\perp)=n$).

We now claim that $C^\perp$ is a $[n,n-k]$ code with generator matrix $H^T$ and parity check matrix $G^T$. To see that $H^T$ is a generator matrix notice that the rows of $H$ are a basis for $C^\perp$ and thus any column vector in $C^\perp$ can be written as a sum of columns of $H^T$. For the parity check matrix: if $x \in C^\perp$ then $x$ is orthogonal to all elements of $C$ so is orthogonal to columns of $G$ so $G^T x=0$. Finally if $G^T x=0$ then $x$ is orthogonal to a basis of $C$ so is orthogonal to $C$ so $x \in C^\perp$.

We now explain error correction with an $[n,k]$ code. To transmit $u\in \F_2^k$ we send $x=Gu$. Then some error $r \in \F_2^n$ (it may be the trivial error $r=0$) occurs and we receive $y=x+r$. The decoding algorithm is to decide that the sent codeword is a codeword $x^* \in C$ which is closest to $y$. Here closest is with respect to the Hamming distance
\[d_H(a,b)=\mbox{number of elements in which } a \mbox{ and } b \mbox{ differ}.\] Then to recover the information we decode to the unique $u^*\in \F_2^k$ which corresponds to $x^*$.

With this in mind, when designing a linear code we would like codewords to be far apart. The \textit{minimum distance}\index{minimum distance!classical} $d$ of a code is the minimum of $d_H(a,b)$ for all $a \neq b \in C$. For linear codes this minimum distance is also the minimum weight of nonzero codewords where the weight of a codeword is
\[\textrm{wt}(a)=d_H(a,0)=\mbox{number of 1's in } a.\]
To see this, we have
\[d = \min_{a\neq b \in C} d_H(a,b) =\min_{a\neq b \in C} \textrm{wt}(a+b) = \min_{c \in C\setminus\{0\}} \textrm{wt}(c).\]

We will refer to such a code as an $[n,k,d]$-code.

\section{Quantum mechanics on qubits}
This introduction to quantum mechanics for quantum computing follows \cite{nielsenquantum} with some simplifications. Our quantum computing model is based on \textit{qubits}\index{qubit} (named for quantum bits) although more general qudits (quantum digits) or other systems are possible. Choose a basis of $\C^2$ (called the \textit{computational basis}) to be
\[|0\rangle = \begin{bmatrix} 1\\0 \end{bmatrix} \mbox{ and } |1\rangle=\begin{bmatrix}0\\1\end{bmatrix}.\]

We now give some postulates for the quantum mechanics\index{quantum mechanics} of qubits.
\begin{enumerate}
\item The state of $n$ qubits is an element of $\mathcal{H}_n=(\C^2)^{\otimes n}$. We work with vectors which are normalized to have $\langle \psi |\psi\rangle=1$ and consider states differing multiplicatively by $e^{i\theta}$ with $\theta\in\R$ to be equal. More concretely, $|\psi\rangle \in \mathcal{H}_n$ can be written as
\[|\psi\rangle=\sum_{i \in \F_2^n} a_i |i\rangle\]
where $|i\rangle=|i_1 i_2 \ldots i_n\rangle=|i_1\rangle |i_2\rangle\cdots |i_n\rangle=|i_1\rangle \otimes |i_2\rangle \otimes \cdots \otimes |i_n\rangle$ are all just different notations for the same thing. The normalization condition means $\sum |a_i|^2=1$.
\item The evolution of the system is described by a unitary transformation. That is, the state $|\psi\rangle$ of the system at time $t_1$ is related to the state $|\psi'\rangle$ of the system at time $t_2$ by $U=U(t_1,t_2)\in U(\mathcal{H}_n)$ via $|\psi'\rangle = U|\psi\rangle$.
\item Given an \textit{observable}\index{observable} $M$ (a Hermitian operator on $\mathcal{H}_n$) with spectral decomposition $M=\sum_m m P_m$ we can measure a state $|\psi\rangle$ with respect to $M$. The result of the measurement is $m$ with probability $p(m)=\langle\psi|P_m|\psi\rangle$ and if the result is $m$ then the new state is $P_m|\psi\rangle/\sqrt{p(m)}$.
\end{enumerate}

The following proposition justifies the commonly used statement that commuting observables can be measured `simultaneously'.

\begin{prop}
If observables $M_1,\dots,M_k$ commute then we can measure $|\psi\rangle$ with respect to these in any order and have the same probability of measurement and state outcome.
\end{prop}
\begin{proof}
Since the $M_i$ are Hermitian they are diagonalizable and since they commute they are mutually diagonalizable. Write $M_i=\sum_{m_i} m_i P_{i,m_i}$. Notice that $P_{i,m_i}P_{i,m_i'}=\delta_{m_im_i'}P_{i,m_i}$ and $P_{i,m_i}P_{j,m_j}=P_{j,m_j}P_{i,m_i}$ if $i\neq j$. 

If we first measure with respect to $M_i$ then we get result $m_i$ with probability $p(m_i)=\langle\psi|P_{i,m_i}|\psi\rangle$ and new state $|\psi'\rangle=P_{i,m_i}|\psi\rangle/\sqrt{p(m_i)}$. Measuring this new state with respect to $M_j$ gives result $m_j$ with probability 
\[p(m_j)=\langle \psi'|P_{j,m_j}|\psi'\rangle= \frac{\langle\psi|P_{i,m_i}^\dagger}{\sqrt{p(m_i)}}P_{j,m_j}\frac{P_{i,m_i}|\psi\rangle}{\sqrt{p(m_i)}}=\frac{\langle\psi|P_{j,m_j}P_{i,m_i}|\psi\rangle}{p(m_i)}\]
and new state
\[\frac{P_{j,m_j}|\psi'\rangle}{\sqrt{p(m_j)}}=\frac{P_{j,m_j}P_{i,m_i}|\psi\rangle}{\sqrt{\langle\psi|P_{j,m_j}P_{i,m_i}|\psi\rangle}}.\]
Thus measuring with respect to $M_i$ and $M_j$ in either order is equivalent to measuring with respect to $M_iM_j=\sum_{m_i,m_j}P_{j,m_j}P_{i,m_i}$. So measuring $M_1,\dots,M_k$ in any order is equivalent to measuring $M_1\dots M_k$.
\end{proof}

\section{Stabilizer codes}

The stabilizer code formalism, first introduced by Gottesman in \cite{gottesman1997stabilizer}, is a way of describing quantum codes somewhat analogous to linear codes in the classical setting. Our discussion in this section mainly follows \cite{nielsenquantum} and, in parts, \cite{mackay2004sparse}.

Define the Pauli matrices\index{Pauli matrices}
\[I=\begin{bmatrix}
1&0\\
0&1
\end{bmatrix}, \quad
X=\begin{bmatrix}
0&1\\
1&0
\end{bmatrix}, \quad Y=\begin{bmatrix}
0&-i\\
i&0
\end{bmatrix}, \quad Z=\begin{bmatrix}
1&0\\
0&-1
\end{bmatrix}.\]
They can be easily seen to be Hermitian and unitary and checked to satisfy the following relations:
\[X^2=Y^2=Z^2=I,\]
\[XY=iZ \quad ZX=iY \quad YZ=iX,\]
\[YX=-iZ \quad XZ=-iY \quad ZY=-iX.\]

Let $U(\mathcal{H}_n)$ be the group of unitary operators on the space of $n$ qubits. Define the \textit{Pauli group}\index{Pauli group} to be the group $G_n$ inside $U(\mathcal{H}_n)$ generated by operators of the form $A_1\otimes\dots\otimes A_n$ where each $A_i \in \{I,X,Y,Z\}$. We will sometimes use notation where we omit the tensor signs or include only the non-identity operators. For example $XIY=X_1Y_3 \in G_3$ is shorthand for $X \otimes I \otimes Y$. 

Using this notation we have $X_1 Y_1 Z_1=iI \in G_n$. Thus the group $G_n$ must contain $\{\pm I,\pm iI\}$. But this is enough to ensure $G_n$ is closed under products and inverses: if $c,d \in \{\pm 1,\pm i\}$ and $A_i, B_i \in \{I,X,Y,Z\}$ then we have
\[\left(c \bigotimes_{i=1}^{n} A_i\right)\left(d \bigotimes_{i=1}^{n} B_i \right) = (cd) \bigotimes_{i=1}^{n} (A_iB_i)\]
and
\[\left(c \bigotimes_{i=1}^{n} A_i\right)^{-1}=c^*\bigotimes_{i=1}^{n} A_i\]
and thus
\[G_n=\left\{c \bigotimes_{i=1}^{n} A_i \colon c\in\{\pm1,\pm i\}, A_i \in\{I,X,Y,Z\}\right\}.\]


\begin{prop} 
If we call elements of the Pauli group \em Pauli operators \em we have the following facts.
\begin{enumerate}
\item Pauli operators commute if and only if they have an even number of places with different non-identity matrices. If they do not commute then they anti-commute.
\item Squaring a Pauli operator gives $\pm I$.
\item A Pauli operator $\displaystyle c \bigotimes_{i=1}^{n} A_i$ is Hermitian if and only if $c=\pm1$.
\end{enumerate}
\end{prop}
\begin{proof}
These follow easily from our multiplication rule above and the relations among the Pauli matrices.
\end{proof}

Now for $S \leq G_n$ define $V_S \subseteq \mathcal{H}_n$ to be the set of vectors stabilized by $S$ i.e. 
\[V_S=\{|\psi\rangle \colon s |\psi\rangle = |\psi\rangle \mbox{ for all } s \in S\}.\]
It is easy to check that $V_S$ is a subspace of $\mathcal{H}_n$ and that we can write 
\[V_S=\bigcap_{s \in S} V_{\{s\}}.\]

\begin{prop}
The subspace $V_S \neq 0$ only if $-I \notin S$. In this case we have $S$ abelian, $\pm iI \notin S$ and the relations $g^2=I$ and $g^\dagger=g$ for all $g \in S$.
\end{prop}
\begin{proof}
If $-I \in S$ then $|\psi\rangle=-|\psi\rangle$ so $|\psi\rangle=0$ for all $|\psi\rangle \in V_S$.

If $S$ is not abelian then there exists $M,N \in S$ such that $MN=-NM$, then $MNM^\dagger N^\dagger=-I \in S$. If $\pm iI \in S$ then $(\pm iI)^2=-I \in S$. Also for any $g\in S$ we have $g^2=\pm I$. So $-I \notin S$ implies  $\pm iI \notin S$ and $g^2=I$ for all $g \in S$. Then $g^2=I$ implies $g^\dagger=g$ because $g$ is unitary.
\end{proof}

Define a \textit{stabilizer group}\index{stabilizer group} to be a abelian subgroup $S \leq G_n$ with $-I \notin S$. The \textit{stabilizer code}\index{stabilizer code} given by $S$ is $V_S$.

Recall the definitions of the normalizers and centralizer of a subgroup: the normalizer of the stabilizer group $S$ in $G_n$ is
\[N(S)=\{E \in G_n \colon EgE^\dagger \in S \mbox{ for all } g\in S\}\]
and the centralizer is 
\[C(S)=\{E \in G_n \colon EgE^\dagger=g\mbox{ for all } g\in S\}.\]
Clearly $C(S) \subseteq N(S)$ but in this case the inclusion is true in the opposite direction also: if $E \in N$ then $EgE^\dagger=\pm gEE^\dagger=\pm g$. So since $EgE^\dagger \in S$ we must have plus not minus and $EgE^\dagger=g$.

We will often work with generators for $S$ such that $S=\langle g_1, \ldots, g_m\rangle$. Note that $E$ commutes with all elements of $S$ if and only if it commutes with all the generators. To prove this: using the fact that the $g_l$ commute and square to one, a general $g \in S$ can be written as $g=g_1^{\epsilon_1} \cdots g_m^{\epsilon_m}$ with $\epsilon_l\in \{0,1\}$. Then if $E$ commutes with each $g_l$ it commutes with $g$.

We now describe the error correction process. Our errors are elements of $G_n$. We start with a state $|\psi\rangle \in V_S$ then after error $E$ occurs the system is in state $E|\psi\rangle$. If $S=\langle g_1, \ldots, g_{m}\rangle$ then the \textit{syndrome}\index{syndrome} of an error operator $E$ is 
\[\beta=\beta(E)=(\beta_1\ldots,\beta_{m})\] where $\beta_l \in\{0,1\}$ is defined by the equation \[Eg_l=(-1)^{\beta_l} g_lE.\]

Now the stabilizer generators $g_l$ are commuting Hermitian operators so are observables that can be measured simultaneously. Each observable $g_l$ has eigenvalues $\pm1$ (because $g_l^2=I$) and the projectors onto the $+1$ and $-1$ eigenspaces are $(I+g_l)/2$ and $(I-g_l)/2$ respectively. Thus \[g_l=(+1)\frac{I+g_l}{2}+(-1)\frac{I-g_l}{2}.\]
If $\beta_l$ is the syndrome of $g_l$ then measuring $g_l$ gives result $+$ with probability
\begin{align*}
p(+)&=\langle \psi | E^\dagger \left(\frac{I+g_l}{2}\right) E |\psi\rangle\\
&=\frac{1}{2}\langle \psi | \psi\rangle+\frac{1}{2}\langle \psi | E^\dagger g_l E |\psi\rangle\\
&=\frac{1}{2}+\frac{1}{2}(-1)^{\beta_l}\langle \psi | g_l E^\dagger E |\psi\rangle\\
&=\frac{1}{2}+\frac{1}{2}(-1)^{\beta_l}\langle \psi | \psi\rangle\\
&=\frac{1}{2}+\frac{1}{2}(-1)^{\beta_l}\\
&=1-\beta_l.
\end{align*}
Thus the outcome of the measurement is deterministic and depends only on the syndrome of the error, not the state $|\psi\rangle$.

If we have a collection of errors with distinct syndromes then we can correct the errors. In fact more is true as we will now see.

\begin{thm}Suppose $\{E_j\}$ is a set of error operators such that $E_j^\dagger E_k \notin C(S)\setminus S$ for all $j,k$. Then $\{E_j\}$ is correctable. 
\end{thm}

\begin{proof}
First note that $Eg_l=(-1)^{\beta_l}g_lE$ can be rewritten as $E^\dagger g_l=(-1)^{\beta_l}g_lE^\dagger$ so $E^\dagger$ has the same syndrome as $E$. Let $\beta(E_j)=(\beta_{j,1},\dots,\beta_{j,m})$ and similarly for $\beta(E_k)$. Then \[E_j^\dagger E_k g_l=(-1)^{\beta_{j,l}}(-1)^{\beta_{k,l}}g_l E_j^\dagger E_k\] so $E_jE_k^\dagger\in C(S)$ if and only if $(-1)^{\beta_{j,l}}(-1)^{\beta_{k,l}}=1$ for all $l$ if and only if $E_j$ and $E_k$ have the same syndrome. Thus the theorem to be proved can be restated as: a set of errors is correctable if errors with the same syndrome differ by an element of the stabilizer.

If the syndrome corresponding to $E_j$ is unique then we can correct the error by applying the operation $E_j^\dagger$, so the state becomes $E_j^\dagger E_j |\psi\rangle = |\psi\rangle$. If we have two errors $E_j$ and $E_k$ with the same syndrome then, by assumption in the theorem, $E_j^\dagger E_k \in S$. Thus even if we use the `wrong' operator, $E_j^\dagger$ instead of $E_k^\dagger$, to correct we still have $E_j^\dagger E_k |\psi\rangle = |\psi\rangle$.
\end{proof}

Define the \textit{distance}\index{minimum distance!quantum} of a stabilizer code to be the minimum weight (number of non-identity components) of a Pauli operator in $C(S) \setminus S$. Then by the theorem above a distance $d$ stabilizer code can fix errors on any $\lfloor(d-1)/2\rfloor$ qubits. We will say $V_S$ is an $[n,k,d]$ quantum code if $V_S$ is a $2^k$ dimensional subspace of $\mathcal{H}_n$ with distance $d$.

\section{Check matrix representation}
Define a function $r \colon G_n \to \F_2^{2n}$ by writing $g$ as a string of $X$'s times a string of $Z$'s, forgetting the constant out the front, and then writing those strings in binary. For example $g=XIY=i(XIX)(IIZ)$ and $r(g)=101001$. 

Notice $r(gg')=r(g)+r(g')$ and that $\ker{r}=\{\pm I,\pm iI\}$. Also for any string in $\F_2^{2n}$ we can find an operator that maps to it. Thus $G_n/\{\pm I,\pm iI\} \cong \F_2^{2n}$ (an isomorphism of a multiplicative group with the additive group of $\F_2^{2n}$). Define the \textit{effective Pauli group}\index{Pauli group!effective} to be $\overline{G}_n=G_n/\{\pm I,\pm iI\}$. We will choose coset representatives of $\overline{G}_n$ of the form
\[\bigotimes_{i=1}^{n} A_i\]
where each $A_i \in \{I,X,Y,Z\}$,

Now if $S$ is a stabilizer group then since $-I \notin S$ we have no pairs of elements differing by $-I$ or $\pm iI$ so $S\cong r(S)$.

Define \[\Lambda = \begin{bmatrix}
0&I_n\\
I_n&0
\end{bmatrix}.\]
Now write $A= \begin{bmatrix}
x(g) & z(g)
\end{bmatrix}$ and define the \textit{twisted product} 
\[r(g) \odot r(g') = r(g)\Lambda r(g')^T = x(g) \cdot z(g')+z(g) \cdot x(g').\]
Then we claim that $g$ and $g'$ commute if and only if $r(g) \odot r(g')=0$. To see this, note that wherever $g$ and $g'$ have different non-identity matrices in a position, we get exactly one one in the sum for the twisted product.

The generators for $S=\langle g_1, \ldots, g_{m}\rangle$ are said to be \textit{irredundant} if removing any generator makes the group smaller.
\begin{prop}
The generators $g_l$ of a stabilizer group are irredundant if and only if the collection of $r(g_l)$ are linearly independent.
\end{prop}
\begin{proof}
The rows are linearly independent over $\F_2$ if and only if $\sum a_i r(g_i)=0$ with $a_j =1$ for some $j$. But $\sum a_i r(g_i)=0$ if and only if $\prod g_i^{a_i} \in \{ \pm I,\pm iI\}$. But this can only be $I$ because it is in $S$ and $-I \notin S$. So some $a_j =1$ if and only if $g_j=\prod_{i\neq j} g_i^{a_i}$ i.e. $g_j$ is dependent on the other generators.
\end{proof}

So, if we create a matrix of rows which have twisted product zero and which are linearly independent then that defines a stabilizer group (choose the $g_i$ corresponding to the $r_i$ to be the one with $c=1$). If we write the matrix as
\[A= \begin{bmatrix}
A_1 & A_2
\end{bmatrix}\]
then the condition that all pairs of rows have twisted product zero becomes $A_1A_2^T+A_2A_1^T=0$.

To decode in the check matrix\index{check matrix} representation we need to find the syndrome of an error $E$. As discussed earlier this depends on whether $E$ commutes with the generators $g_l$. Thus we need to take the twisted product of rows of the check matrix $A$ with $r(E)$. In practice if we write $\begin{bmatrix}
z(E) & x(E)
\end{bmatrix}$ instead of $r(E)=\begin{bmatrix}
x(E) & z(E)
\end{bmatrix}$ then we can instead use the normal $\F_2$ matrix product. Once again, if the error has unique syndrome then it can be decoded and also if errors with the same syndrome differ by elements of the stabilizer they can be corrected.

We now develop a formula for the dimension of a stabilizer code.
\begin{lem}
If $S=\langle g_1,\dots,g_m\rangle$ with irredundant generators and $-I\notin S$ then for each $i$ there exists $h_i\in G_n$ such that $h_ig_j=(-1)^{\delta_{ij}}g_jh_i$ (i.e. $h_i$ anti commutes with $g_i$ and commutes with all other $g_j$).
\end{lem}
\begin{proof}
This is equivalent to solving $A[z(h_i)\quad x(h_i)]=e_i$ which can be done because $A$ has linearly independent rows.
\end{proof}

Now for $x\in\F_2^m$ define \[h_x=\prod_{i=1}^m h_i^{x_i} \text{ and } E_x=\{|\psi\rangle \colon g_j|\psi\rangle=(-1)^{x_j}|\psi\rangle\}.\] Notice that $h_xg_j=(-1)^{x_j}g_jh_x$.

\begin{prop}
If $S=\langle g_1,\dots,g_m\rangle$ with irredundant generators and $-I\notin S$ then $\dim V_S=2^{n-m}$.
\end{prop}
\begin{proof}
The $g_j$ are commuting and diagonalizable so we can simultaneously diagonalize them. This gives \[\mathcal{H}_n=\bigoplus_{x\in\F_2^n}E_x.\] Now we claim that $E_0 \cong E_x$ for any $x$. To see this we have the linear map $h_x\colon E_0\to E_x$. This has the correct codomain because if $|\psi\rangle\in E_0$ then $g_jh_x|\psi\rangle=(-1)^{x_j}h_x|\psi\rangle$ so $h_x|\psi\rangle\in E_x$. There is also the linear map $h_x^\dagger \colon E_x \to E_0$ for which $|\psi\rangle\in E_x$ has $g_jh_x^\dagger|\psi\rangle=(-1)^{x_j}h_x^\dagger g_j|\psi\rangle=h_x^\dagger|\psi\rangle$ so $h_x^\dagger|\psi\rangle\in E_0$. These two maps are inverses of each other and thus we have $\dim(\mathcal{H}_n)=2^m\dim E_0$. But $V_S=E_0$ so we conclude that $\dim V_S=2^{n-m}$.
\end{proof}


\section{CSS codes}

A Calderbank-Shor-Steane (CSS)\index{CSS code} code is a stabilizer code built out of two classical codes. We give a definition allowing not necessarily full rank matrices similar to the one in \cite{tillich2009quantum}.

\begin{prop}
Assume that parity check matrices $H_X$ and $H_Z$ define classical binary linear codes $C_X$ and $C_Z$ of length $n$ and that $H_XH_Z^T=0$ (this is equivalent to $C_Z^\perp \subseteq C_X$ which is equivalent to $C_X^\perp \subseteq C_Z$). Then the stabilizer code with binary check matrix
\[A=\begin{bmatrix}
H_X & 0\\
0 & H_Z
\end{bmatrix},\]
is a quantum $[n,k,d]$ code where \[k=n-\dim(C_X^\perp)-\dim(C_Z^\perp)\] and
\[d=\min \{\wt(c) \colon c \in (C_Z \setminus C_X^\perp) \cup (C_X \setminus C_Z^\perp)\}.\]
\end{prop}
\begin{proof}
We have $C_X=\ker(H_X)$ and $C_Z=\ker(H_Z)$ and thus $C_X^\perp=\im(H_X^T)$ and $C_Z^\perp=\im(H_Z^T)$. For the dimension of the code we have
\begin{align*}
k&=n-\text{\# independent rows of }A\\
&=n-\dim(\im H_Z^T)-\dim(\im H_X^T)\\
&=n-\dim(C_X^\perp)-\dim(C_Z^\perp).
\end{align*}

Next, recall that the distance of a quantum stabilizer code is
\[d=\min \{\wt(E) \colon E \in C(S)\setminus S\}.\]
Notice that
\[S=\langle X^a, Z^b \colon a \mbox{ is a row of } H_X, b \mbox{ is a row of } H_Z \rangle = \{X^aZ^b \colon a \in C_X^\perp, b\in C_Z^\perp\}\]
where $X^a$ is notation for $X_1^{a_1} \cdots X_n^{a_n}$. Now for $X^aZ^b\in C(S)$ we need $X^aZ^b$ to commute with $X^{a'}$ for $a'\in C_X^\perp$. Notice $X^aZ^bX^{a'}=(-1)^{a'\cdot b}X^{a'}X^aZ^b$ so we must have $a'\cdot b=0$ for all $a'\in C_X^\perp$ so $b\in C_X$. Similar arguments show $a\in C_Z$ so, ignoring global phase factors,
\[C(S)=\{X^aZ^b \colon a \in C_Z, b\in C_X \}.\]
For each $X^aZ^b$ at least one of $X^a$ and $X^b$ has lesser weight. Thus there exists a minimum weight vector in $C(S)\setminus S$ of the form $X^a$ or $Z^b$ so the formula in the proposition follows.
\end{proof}

\section{An example of a stabilizer code}

%\item The 5 qubit code:
%
%The code is $S=\langle XZZXI, IXZZX, XIXZZ, ZXIXZ \rangle$ with binary check matrix
%\[\begin{bmatrix}
%1 & 0 & 0 & 1 & 0 & 0 & 1 & 1 & 0 & 0 \\
%0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 1 & 0 \\
%1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\
%0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1
%\end{bmatrix}\]
%
%This code can correct the error set $\{I,X_i,Y_i,Z_i\colon i=1,\ldots,5\}$ because each of these has a unique syndrome. Thus it is a $[5,1.3]$ code.

We describe Steane's 7 qubit code\index{Steane's 7 qubit code}. Begin with the classical $[7,4]$ Hamming code $C$ specified by the parity check matrix
\[H= \begin{bmatrix}
0 & 0 & 0 & 1 & 1 & 1 & 1\\
0 & 1 & 1 & 0 & 0 & 1 & 1 \\
1 & 0 & 1 & 0 & 1 & 0 & 1
\end{bmatrix}.\]
This code can correct one error because the syndromes of the 8 weight-zero and weight-one errors are distinct. The code also has $C^\perp\subseteq C$: the codewords in $C^\perp$ are linear combinations of rows of $H$ but the rows of $H$ are all orthogonal to all rows of $H$. Define a CSS code by $H_X=H_Z=H$. Then this is an $[n,k,d[$ code with $n=7$ and $k=7-3-3=1$. To find $d=\min\{\wt(c) \colon c\in C\setminus C^\perp\}$, note that there are no elements of weight less than or equal 2 because no column or sum of two columns of $H$ is equal to 0. Furthermore the sum of the first three columns is 0 so $1110000\in C$ and this codeword is not in $C^\perp$ because no sum of rows of $H$ is equal to it. Thus $d=3$ and we have a $[7,1,3]$ CSS code.

\chapter{Map-homology codes}
In this chapter we give an exposition of some code construction techniques from the point of view of homology. We begin with the most general case.

\section{Codes from \texorpdfstring{$\F_2$}{F2}-chain complexes}\label{sec:chainComplex}

Let $(C_\bullet, \partial_\bullet)$ be a chain complex\index{chain complex} of finite dimensional $\F_2$-vector spaces
\[\cdots \to C_{i+1} \xrightarrow{\partial_{i+1}} C_i \xrightarrow{\partial_i} C_{i-1} \to \cdots\]
(of course this means that $\partial_{i}\circ\partial_{i+1}=0$) and as usual define the homology\index{homology} vector spaces $H_i=\ker(\partial_i)/\im(\partial_{i+1})$.

We fix bases of the $C_i$ and use $[\cdot]$ to denote matrices with respect to these bases. Let $H_X=[\partial_i]$, a $\dim C_{i-1} \times \dim C_i$ matrix, and $H_Z=[\partial_{i+1}]^T$, so $H_Z$ is a $\dim C_{i+1} \times \dim C_i$ matrix. Then $H_X H_Z^T=[\partial_{i} \circ \partial_{i+1}]=0$ so we can form the $[n,k,d]$ CSS code with binary check matrix \[A=\begin{bmatrix}
H_X & 0\\
0 & H_Z
\end{bmatrix}.\] 

We have $n=\dim C_i$ and also notice $H_i=\ker(H_X)/\im(H_X^T)=C_X/C_Z^\perp$. From our discussion of classical dual codes we have $\dim(C_X)+\dim(C_X^\perp)=\dim(C_i)$. This gives
\begin{align*}
k & = \dim(C_i)-\dim(C_X^\perp)-\dim(C_Z^\perp)\\
&= \dim(C_X)-\dim(C_Z^\perp)\\
&=\dim(C_X/C_Z^\perp)\\
&=\dim(H_i).
\end{align*}

To understand the set $C_Z \setminus C_X^\perp$ we can consider the dual complex\index{dual!chain complex}. We now justify the intuitively reasonable idea that taking transposes of $H_X$ and $H_Z^T$ leads to cohomology.

Dualizing the chain complex
\[\cdots \to C_{i+1} \xrightarrow{\partial_{i+1}} C_i \xrightarrow{\partial_i} C_{i-1} \to \cdots\]
gives
\[\cdots \leftarrow C^*_{i+1} \xleftarrow{\partial^*_{i+1}} C^*_i \xleftarrow{\partial^*_i} C^*_{i-1} \leftarrow \cdots\]
where $C_i^*=\Hom(C_i,\F_2)$ and $\partial^*_i(\phi)$ is defined by $\partial^*_i(\phi)(v)=\phi(\partial_i(v))$. To check that the dual complex really is a complex we have
\[(\partial^*_{i+1}\circ\partial^*_{i})(\phi)(v)=\partial^*_{i+1}(\partial^*_i(\phi))(v)=\partial_i^*(\phi)(\partial_{i+1}(v))=\phi(\partial_i(\partial_{i+1}(v)))=0.\]
Having fixed a basis for each $C_i$ we have a non-degenerate bilinear form $\langle\,,\,\rangle\colon C_i\times C_i \to \F_2$ given by $\langle a,b\rangle=[a]\cdot[b]$. Then $C_i\cong C^*_i$ by $\psi_i\colon a\mapsto \langle a,\cdot\rangle$. Now define $\delta_i = \psi_i^{-1}\circ\partial^*_i\circ\psi_{i-1}$ and then since
\[\delta_{i+1}\circ\delta_i=\psi_{i+1}^{-1}\circ\partial^*_{i+1}\circ\psi_i\circ\psi_i^{-1}\circ\partial^*_i\circ\psi_{i-1}=\psi_{i+1}^{-1}\circ\partial^*_{i+1}\circ\partial^*_i\circ\psi_{i-1}=0\]
we have a chain complex
\[\cdots \leftarrow C_{i+1} \xleftarrow{\delta_{i+1}} C_i \xleftarrow{\delta_i} C_{i-1} \leftarrow \cdots.\]

The definition of $\delta_i$ gives us $\psi_i(\delta_i(v))=\partial_1^*(\psi_{i-1}(v))$ for all $v$ which implies $\langle\delta_i(v),w\rangle=\langle v,\partial_i (w)\rangle$ for all $v,w$. In particular if $C_i$ has basis $v_1,\dots,v_{\dim C_i}$ and $C_{i+1}$ has basis $w_1,\dots,w_{\dim C_{i+1}}$ then we have $\langle\delta_i(v_j),w_k\rangle=\langle v_j,\partial_i(w_k)\rangle$. For the right hand side of this equality we have
\[\langle v_j,\partial_i(w_k)\rangle=[v_j]\cdot[\partial_i(w_k)]=e_j\cdot [\partial_i] e_k=[\partial_i]_{j,k}\]
and similarly $\langle\delta_i(v_j),w_k\rangle=[\delta_i]_{k,j}$ which gives us $[\delta_i]=[\partial_i]^T$. With our earlier definitions $H_X=[\partial_i]$ and $H_Z=[\partial_{i+1}]^T$ we then have $[\delta_i]=H_X^T$ and $[\delta_{i+1}]=H_Z$.



%Define
%\[\cdots \to C_{i-1} \xrightarrow{d_i} C_i \xrightarrow{d_{i+1}} C_{i+1} \to \cdots\]
%with $d_i$ given by $H_X^T$ and $d_{i+1}$ given by $H_Z$. Then $d_{i+1} \circ d_i=0$ because $H_Z H_X^T=0$.

Define the cohomology\index{cohomology} vector space $H^i$ by 
\[H^i=\ker(\delta_{i+1})/\im(\delta_i)=\ker(H_Z)/\im(H_X^T)=C_Z/C_X^\perp.\] Once again we have
\begin{align*}
k & = \dim(C_i)-\dim(C_X^\perp)-\dim(C_Z^\perp)\\
&= \dim(C_Z)-\dim(C_X^\perp)\\
&=\dim(C_Z/C_X^\perp)\\
&=\dim(H^i).
\end{align*}

Recall that $d=\min\{\wt(c)\colon c\in (C_X\setminus C_Z^\perp) \cup (C_Z\setminus C_X^\perp)\}$ so the minimum weight can be found by looking at elements of $C_X$ and $C_Z$ whose classes are not zero in $H_i$ and $H^i$ respectively.

%Finally
%\[H_i=C_X/C_Z^\perp=\{[0],[c_2],\ldots,[c_{2^k}]\}.\]
%If we choose each coset representative $c_i$ to be a lowest weight element of $[c_i]$ which is in $C_X \setminus C_Z^\perp$ and do the same for $H^i$ then we have
%\[d=\min\{\wt(c) \colon [c] \in (H_i \cup H^i)\setminus\{[0]\}\}.\]
%(To see that this is true: if $c$ has minimum weight in $(C_X \setminus C_Z^\perp) \cup (C_Z \setminus C_X^\perp)$ then $[c] \in (H_i \cup H^i)\setminus\{[0]\}$ and so $c$ will be chosen as one of the $c_i$.)

\section{Codes from graphs on surfaces}\label{sec:codesFromMaps}
The idea of creating CSS codes from graphs embedded on surfaces\index{embedded graph} has been discussed in a number of papers. See for example \cite{zemor2009cayley} for an introduction to this and see \cite{lando2004graphs} for an introduction to graphs embedded in surfaces. Let $\Sigma$ be a compact, connected, oriented surface (i.e. 2-manifold) with genus $g$. We consider cellular homology with coefficients in $\F_2$ (see \cite{hatcheralgebraic} for an introduction to algebraic topology). It is well known that 
\[H_k(\Sigma)\cong\begin{cases}
\F_2 & \text{if $k=0$ or $2$}\\
(\F_2)^{2g} & \text{if $k=1$}\\
0 & \text{otherwise}.
\end{cases}\]

Define an \textit{embedding} of an undirected (simple) graph $G$ in $\Sigma$ to be a function $G\to \Sigma$ that takes vertices of $G$ to distinct points in $\Sigma$ and edges in $G$ to simple paths in $\Sigma$ (i.e. images of injective continuous functions $[0,1]\to\Sigma$) that intersect only at common vertices. We will denote such an embedding by $(\Sigma,G)$. Define a \textit{face} of the embedding to be a maximal connected subset of $\Sigma$ that does not intersect $G$. A \textit{2-cell embedding} is one where all the faces are homeomorphic to open disks; we shall only consider 2-cell embeddings. A 2-cell embedding is also called a \textit{map}\index{map|see{embedded graph}}.

Notice that a 2-cell embedding is actually a 2-dimensional CW complex and thus we have the standard cellular homology with $\F_2$ coefficients as follows. Let $V,E,F$ be sets of vertices, edges and faces of $(\Sigma,G)$ and $\mathcal{V}, \mathcal{E}, \mathcal{F}$ be $\F_2$-vector spaces with bases $V,E,F$ respectively. Then we have a chain complex
\[0 \to \mathcal{F} \xrightarrow{\partial_2} \mathcal{E} \xrightarrow{\partial_1} \mathcal{V} \to 0\]
where $\partial_2$ takes a face to the sum of the edges around that face and $\partial_1$ takes an edge to the sum of the vertices adjacent to that edge. We can then check that $\partial_1\circ \partial_2$ takes a face to twice the sum of the vertices around the face i.e. zero.

So we have $H_1((\Sigma,G))=\ker\partial_1/\im\partial_2$ and by homotopy invariance we know that $H_1((\Sigma,G)) \cong H_1(\Sigma)\cong (\F_2)^{2g}$. Create a code from the chain complex as discussed in Section \ref{sec:chainComplex}. This gives $H_X=[\partial_1]$, a $|V| \times |E|$ matrix that we can think of as the (unsigned) vertex-edge incidence matrix. Similarly $H_Z=[\partial_2]^T$ is an $|F| \times |E|$ matrix, the face-edge incidence matrix.

We now discuss the way we will understand $C_X\setminus C_Z^\perp$ in this context. Define the (Poincar\'{e}) dual\index{dual!Poincar\'{e}} of an embedded graph $(\Sigma,G)$ to be the embedded graph $(\Sigma,G^*)$ with:
\begin{itemize}
\item One vertex of $G^*$ inside each face of $G$,
\item For each edge $e$ of $G$ there is an edge $e^*$ of $G^*$ between the two vertices of $G^*$ corresponding to the two faces of $G$ adjacent to $e$.
\end{itemize}
Then the faces of $G^*$ correspond to the vertices of $G$. To see this, notice that a vertex of $G$ is adjacent to a set of edges of $G$ and the corresponding edges of $G^*$ form the boundary of a face.

So identifying the set of edges in $G^*$ with the edges of $G$ we can consider the homology chain complex for $(\Sigma,G^*)$:
 \[0 \to \mathcal{V} \xrightarrow{\delta_1} \mathcal{E} \xrightarrow{\delta_2} \mathcal{F} \to 0\]
 where $\delta_1(v)$ is the sum of edges of $G$ adjacent to $v$ and $\delta_2(e)$ is the sum of faces of $G$ adjacent to $e$. This shows that $[\delta_1]=[\partial_1]^T=H_X^T$ and $[\delta_2]=[\partial_2]^T=H_Z$ so
 \[H_1((\Sigma,G^*))\cong \ker H_Z/\im H_X^T=C_Z/C_X^\perp\cong H^1((\Sigma,G)).\]
 Also $(\Sigma,G^*)$ is a CW complex structure for $\Sigma$ so $H_1((\Sigma,G^*))\cong \F_2^{2g}$.

So from $(\Sigma,G)$ we have constructed a CSS code with parameters $[n,k,d]$ where $n$ is the number of edges of $G$, $k=2g$ and
\[d=\min\{\wt(c)\colon c\in (C_X\setminus C_Z^\perp) \cup (C_Z\setminus C_X^\perp)\}.\]
Elements of $C_X$ are cycles of the graph $G$ (equivalently subgraphs where each vertex is adjacent to an even number of edges) and similarly elements of $C_Z$ are cycles of $G^*$. Elements of $C_X\setminus C_Z^\perp$ are cycles whose homology class is not zero i.e. non-boundary cycles. So $d$ is the lowest weight (i.e. shortest) non-boundary cycle in $G$ or $G^*$.

There is a way to understand the lengths of cycles of $G^*$ just looking at $G$. A cycle in $G^*$ corresponds to a collection of faces of $G$ where each face is edge-adjacent to an even number of faces in the collection. The length of the cycle is exactly the number of edges of $G$ that we cross as we traverse the cycle. Call this the \textit{ladder distance} of the cycle.

\begin{ex}[Toric codes]
Toric codes\index{toric code} were suggested by Kitaev (see for example \cite{dennis2002topological}). Fix a positive integer $m$ and embed an $m\times m$ square grid $G$ in the torus (see Figure \ref{fig:toric} where $m=4$ and we represent the torus by a square with left and right edges identified and top and bottom edges identified). Then $G^*$ is isomorphic to $G$ (see Figure \ref{fig:toricDual} for the $m=4$ case). We have $n=2m^2$, the number of edges and $k=2g=2$. The minimum weight non-boundary cycles are the straight vertical and horizontal cycles of length $m$ so $d=m$. Thus the toric code from the $m\times m$ grid is a $[n,k,d]=[2m^2,2,m]$ code. From this we see $k=2$ is constant, $d=\sqrt{\frac{1}{2}n}$ and thus $kd^2=n$.

\begin{figure}[p]
\centering
\begin{tikzpicture}
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (-7, 6) {};
		\node [style=vertex] (1) at (-3, 6) {};
		\node [style=vertex] (2) at (-5, 4) {};
		\node [style=vertex] (3) at (-1, 4) {};
		\node [style=vertex] (4) at (-7, 2) {};
		\node [style=vertex] (5) at (-3, 2) {};
		\node [style=vertex] (6) at (-5, 0) {};
		\node [style=vertex] (7) at (-1, 0) {};
		\node [style=vertex] (8) at (-5, 6) {};
		\node [style=vertex] (9) at (-1, 6) {};
		\node [style=vertex] (10) at (-7, 4) {};
		\node [style=vertex] (11) at (-3, 4) {};
		\node [style=vertex] (12) at (-5, 2) {};
		\node [style=vertex] (13) at (-1, 2) {};
		\node [style=vertex] (14) at (-7, 0) {};
		\node [style=vertex] (15) at (-3, 0) {};
		\node [style=none] (16) at (-8, 6) {};
		\node [style=none] (17) at (-7, 7) {};
		\node [style=none] (18) at (-8, 7) {};
		\node [style=none] (19) at (-8, 4) {};
		\node [style=none] (20) at (-8, 2) {};
		\node [style=none] (21) at (-8, 0) {};
		\node [style=none] (22) at (-8, -1) {};
		\node [style=none] (23) at (-7, -1) {};
		\node [style=none] (24) at (-5, -1) {};
		\node [style=none] (25) at (-3, -1) {};
		\node [style=none] (26) at (-1, -1) {};
		\node [style=none] (27) at (0, -1) {};
		\node [style=none] (28) at (0, 0) {};
		\node [style=none] (29) at (0, 2) {};
		\node [style=none] (30) at (0, 4) {};
		\node [style=none] (31) at (0, 6) {};
		\node [style=none] (32) at (0, 7) {};
		\node [style=none] (33) at (-1, 7) {};
		\node [style=none] (34) at (-3, 7) {};
		\node [style=none] (35) at (-5, 7) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (18.center) to (22.center);
		\draw (22.center) to (27.center);
		\draw (27.center) to (32.center);
		\draw (32.center) to (18.center);
		\draw (17.center) to (0);
		\draw (0) to (16.center);
		\draw (0) to (8);
		\draw (8) to (35.center);
		\draw (34.center) to (1);
		\draw (1) to (8);
		\draw (1) to (9);
		\draw (9) to (33.center);
		\draw (9) to (31.center);
		\draw (9) to (3);
		\draw (3) to (30.center);
		\draw (3) to (11);
		\draw (11) to (1);
		\draw (11) to (2);
		\draw (2) to (8);
		\draw [in=0, out=180] (2) to (10);
		\draw (10) to (0);
		\draw (10) to (19.center);
		\draw (4) to (20.center);
		\draw (4) to (10);
		\draw (4) to (12);
		\draw (12) to (2);
		\draw (11) to (5);
		\draw (15) to (5);
		\draw (15) to (6);
		\draw (6) to (12);
		\draw (12) to (5);
		\draw (5) to (13);
		\draw (13) to (7);
		\draw (7) to (15);
		\draw (13) to (29.center);
		\draw (13) to (3);
		\draw (4) to (14);
		\draw (14) to (21.center);
		\draw (14) to (23.center);
		\draw (6) to (24.center);
		\draw (6) to (14);
		\draw (15) to (25.center);
		\draw (7) to (26.center);
		\draw (7) to (28.center);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[A toric code with $m=4$]{A toric code with $m=4$.}
\label{fig:toric}
\end{figure}

\begin{figure}[p]
\centering
\begin{tikzpicture}
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (-7, 6) {};
		\node [style=vertex] (1) at (-3, 6) {};
		\node [style=vertex] (2) at (-5, 4) {};
		\node [style=vertex] (3) at (-1, 4) {};
		\node [style=vertex] (4) at (-7, 2) {};
		\node [style=vertex] (5) at (-3, 2) {};
		\node [style=vertex] (6) at (-5, 0) {};
		\node [style=vertex] (7) at (-1, 0) {};
		\node [style=vertex] (8) at (-5, 6) {};
		\node [style=vertex] (9) at (-1, 6) {};
		\node [style=vertex] (10) at (-7, 4) {};
		\node [style=vertex] (11) at (-3, 4) {};
		\node [style=vertex] (12) at (-5, 2) {};
		\node [style=vertex] (13) at (-1, 2) {};
		\node [style=vertex] (14) at (-7, 0) {};
		\node [style=vertex] (15) at (-3, 0) {};
		\node [style=none] (16) at (-8, 6) {};
		\node [style=none] (17) at (-7, 7) {};
		\node [style=none] (18) at (-8, 7) {};
		\node [style=none] (19) at (-8, 4) {};
		\node [style=none] (20) at (-8, 2) {};
		\node [style=none] (21) at (-8, 0) {};
		\node [style=none] (22) at (-8, -1) {};
		\node [style=none] (23) at (-7, -1) {};
		\node [style=none] (24) at (-5, -1) {};
		\node [style=none] (25) at (-3, -1) {};
		\node [style=none] (26) at (-1, -1) {};
		\node [style=none] (27) at (0, -1) {};
		\node [style=none] (28) at (0, 0) {};
		\node [style=none] (29) at (0, 2) {};
		\node [style=none] (30) at (0, 4) {};
		\node [style=none] (31) at (0, 6) {};
		\node [style=none] (32) at (0, 7) {};
		\node [style=none] (33) at (-1, 7) {};
		\node [style=none] (34) at (-3, 7) {};
		\node [style=none] (35) at (-5, 7) {};
		\node [style=dualVertex] (36) at (-6, 5) {};
		\node [style=dualVertex] (37) at (-4, 5) {};
		\node [style=dualVertex] (38) at (-2, 5) {};
		\node [style=dualVertex] (39) at (0, 5) {};
		\node [style=dualVertex] (40) at (-8, 5) {};
		\node [style=dualVertex] (41) at (-8, 3) {};
		\node [style=dualVertex] (42) at (-6, 3) {};
		\node [style=dualVertex] (43) at (-4, 3) {};
		\node [style=dualVertex] (44) at (-2, 3) {};
		\node [style=dualVertex] (45) at (0, 3) {};
		\node [style=dualVertex] (46) at (0, 1) {};
		\node [style=dualVertex] (47) at (-2, 1) {};
		\node [style=dualVertex] (48) at (-4, 1) {};
		\node [style=dualVertex] (49) at (-6, 1) {};
		\node [style=dualVertex] (50) at (-8, 1) {};
		\node [style=dualVertex] (51) at (-8, 7) {};
		\node [style=dualVertex] (52) at (-6, 7) {};
		\node [style=dualVertex] (53) at (-4, 7) {};
		\node [style=dualVertex] (54) at (-2, 7) {};
		\node [style=dualVertex] (55) at (0, 7) {};
		\node [style=dualVertex] (56) at (-8, -1) {};
		\node [style=dualVertex] (57) at (-6, -1) {};
		\node [style=dualVertex] (58) at (-4, -1) {};
		\node [style=dualVertex] (59) at (-2, -1) {};
		\node [style=dualVertex] (60) at (0, -1) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (18.center) to (22.center);
		\draw (22.center) to (27.center);
		\draw (27.center) to (32.center);
		\draw (32.center) to (18.center);
		\draw (17.center) to (0);
		\draw (0) to (16.center);
		\draw (0) to (8);
		\draw (8) to (35.center);
		\draw (34.center) to (1);
		\draw (1) to (8);
		\draw (1) to (9);
		\draw (9) to (33.center);
		\draw (9) to (31.center);
		\draw (9) to (3);
		\draw (3) to (30.center);
		\draw (3) to (11);
		\draw (11) to (1);
		\draw (11) to (2);
		\draw (2) to (8);
		\draw [in=0, out=180] (2) to (10);
		\draw (10) to (0);
		\draw (10) to (19.center);
		\draw (4) to (20.center);
		\draw (4) to (10);
		\draw (4) to (12);
		\draw (12) to (2);
		\draw (11) to (5);
		\draw (15) to (5);
		\draw (15) to (6);
		\draw (6) to (12);
		\draw (12) to (5);
		\draw (5) to (13);
		\draw (13) to (7);
		\draw (7) to (15);
		\draw (13) to (29.center);
		\draw (13) to (3);
		\draw (4) to (14);
		\draw (14) to (21.center);
		\draw (14) to (23.center);
		\draw (6) to (24.center);
		\draw (6) to (14);
		\draw (15) to (25.center);
		\draw (7) to (26.center);
		\draw (7) to (28.center);
		\draw [color=red] (36) to (37);
		\draw [color=red] (37) to (38);
		\draw [color=red] (38) to (39);
		\draw [color=red] (36) to (40);
		\draw [color=red] (36) to (42);
		\draw [color=red] (37) to (43);
		\draw [color=red] (38) to (44);
		\draw [color=red] (44) to (45);
		\draw [color=red] (44) to (43);
		\draw [color=red] (43) to (42);
		\draw [color=red] (42) to (41);
		\draw [color=red] (41) to (40);
		\draw [color=red] (40) to (18.center);
		\draw [color=red] (51) to (52);
		\draw [color=red] (52) to (53);
		\draw [color=red] (53) to (54);
		\draw [color=red] (54) to (32.center);
		\draw [color=red] (32.center) to (39);
		\draw [color=red] (39) to (45);
		\draw [color=red] (45) to (46);
		\draw [color=red] (46) to (27.center);
		\draw [color=red] (27.center) to (59);
		\draw [color=red] (59) to (58);
		\draw [color=red] (58) to (57);
		\draw [color=red] (57) to (56);
		\draw [color=red] (22.center) to (50);
		\draw [color=red] (50) to (41);
		\draw [color=red] (52) to (36);
		\draw [color=red] (53) to (37);
		\draw [color=red] (54) to (38);
		\draw [color=red] (42) to (49);
		\draw [color=red] (43) to (48);
		\draw [color=red] (44) to (47);
		\draw [color=red] (49) to (50);
		\draw [color=red] (49) to (48);
		\draw [color=red] (48) to (47);
		\draw [color=red] (47) to (46);
		\draw [color=red] (47) to (59);
		\draw [color=red] (48) to (58);
		\draw [color=red] (49) to (57);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[A toric code and its dual with $m=4$]{A toric code and its dual with $m=4$. The dual is shown in red.}
\label{fig:toricDual}
\end{figure}

\end{ex}

\section{Planar codes}\label{sec:planarCodes}
The following is an attempt to make more explicit discussion in \cite{dennis2002topological} and \cite{bombin2007homological}. Planar codes\index{planar code} have similar properties to the toric code but allow some choice of parameters and so we can use them to show the tradeoffs in code construction from homology of graphs. They also have the practically desirable property that they can be implemented in a plane rather than a torus.

Begin with a $m \times n$ grid of vertices with $h$ `holes' (edge-contiguous collections of faces together with interior edges and vertices) removed. Think of this as a CW complex $\Gamma$ with 1-skeleton $G$ and 2-cells for each of the non-removed squares in the grid attached to $G$ by homeomorphic maps from $S^1$ to the boundary of the square. Each of these attaching maps have degree $\pm 1$. We will also define an embedding of $\tilde{G}=G$ into the sphere $S^2$ where we further attach a 2-cell to each of the removed holes and to the outer boundary of the grid.

This graph $G$ has at most $mn$ vertices and at most $(m-1)n+(n-1)m$ edges while $G$ has at most $(m-1)(n-1)$ faces and $\tilde{G}$ has at most $(m-1)(n-1)+1$ faces. The graph $\tilde{G}$ has a (Poincar\'{e}) dual graph $\tilde{G}^*$ on the sphere. As discussed in Section \ref{sec:codesFromMaps} this gives us matrices $\tilde{H}_X$ and $\tilde{H}_Z$ and since $0=H_1(S^2)=\tilde{C}_X/\tilde{C}_Z^\perp$ we have $\tilde{C}_X=\tilde{C}_Z^\perp$ and thus of course $\tilde{C}_X^\perp=\tilde{C}_Z$. In words this says all cycles of $\tilde{G}$ and $\tilde{G}^*$ are boundaries.

From the CW complex $\Gamma$ we have an $\F_2$-homology chain complex
\[0\to\mathcal{F}\to\mathcal{E}\to\mathcal{V}\to0\]
and as in Section \ref{sec:chainComplex} we construct matrices $H_X$ and $H_Z$.

Note $H_X$ is the vertex-edge incidence matrix of $G$ so $H_X=\tilde{H}_X$ and $H_Z$ is the face-edge incidence matrix of $\Gamma$ so it can be formed from $\tilde{H}_Z$, the face-edge incidence matrix of $\tilde{G}$, by removing the rows corresponding to the removed faces. These observations imply that $\tilde{C}_X=C_X$ and $\tilde{C}_Z\subseteq C_Z$.

The planar grid with $h$ holes removed is homotopy equivalent to a bouquet of $h$ circles and thus has $H_1(\Gamma)=(\F_2)^h$ and so we have an $[N,k,d]$ code with $N\leq (m-1)n+(n-1)m$ and $k=h$.

To calculate $d$ we notice that
\begin{align*}
C_X\setminus C_Z^\perp&=\tilde{C}_X\setminus C_Z^\perp\\
&=\tilde{C}_Z^\perp\setminus C_Z^\perp\\
&=\{\mbox{boundaries of }\tilde{G}\}\setminus\{\mbox{boundaries of }G\}
\end{align*}
and
\begin{align*}
C_Z\setminus C_X^\perp&=C_Z\setminus\tilde{C}_X^\perp\\
&=C_Z\setminus\tilde{C}_Z\\
&=\{\mbox{cycles of }G^*\}\setminus\{\mbox{cycles of }\tilde{G}^*\}.
\end{align*}
 
Thus a minimum weight element of $C_X\setminus C_Z^\perp$ is a boundary of a removed hole and a minimum weight element of $C_Z\setminus C_X^\perp$ is a cycle of $G^*$, which we can think of as a cycle of $\tilde{G}^*$ except we don't have to check that there an even number of edges adjacent to the vertices corresponding to removed faces. So
\begin{align*}
d=\min\{&\mbox{length of boundaries of removed faces}, \\
&\mbox{paths between holes or paths from holes to edge of grid}\}.
\end{align*}

\begin{ex}
We remove an $l\times l$ hole (including removing $(l-1)^2$ vertices and $2l(l-1)$ edges) from the middle of a square grid. See Figure \ref{fig:planarRemoveOneLbyLSquare} for an example with $l=2$. The boundary of the hole is distance $4l$ so place the hole at a ladder distance $4l$ away from the edge. Then the grid has $m=n=9l-1$ so we have a code with $N=2(9l-1)(9l-2)-2l(l-1)\sim160l^2$, $k=1$ and $d=4l$. So in this case $k=1$ is constant and $d\sim \sqrt{0.1N}$ with $kd^2 \sim 0.1N$.
\end{ex}

\begin{figure}[p]
\centering
\begin{tikzpicture}[x=0.8cm, y=0.8cm]
	\begin{pgfonlayer}{backgroundlayer}
		\fill [black!20!white] (7,7) rectangle (9,9);
	\end{pgfonlayer}
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (0,0) {};
		\node [style=vertex] (1) at (0,1) {};
		\node [style=vertex] (2) at (0,2) {};
		\node [style=vertex] (3) at (0,3) {};
		\node [style=vertex] (4) at (0,4) {};
		\node [style=vertex] (5) at (0,5) {};
		\node [style=vertex] (6) at (0,6) {};
		\node [style=vertex] (7) at (0,7) {};
		\node [style=vertex] (8) at (0,8) {};
		\node [style=vertex] (9) at (0,9) {};
		\node [style=vertex] (10) at (0,10) {};
		\node [style=vertex] (11) at (0,11) {};
		\node [style=vertex] (12) at (0,12) {};
		\node [style=vertex] (13) at (0,13) {};
		\node [style=vertex] (14) at (0,14) {};
		\node [style=vertex] (15) at (0,15) {};
		\node [style=vertex] (16) at (0,16) {};
		\node [style=vertex] (17) at (1,0) {};
		\node [style=vertex] (18) at (1,1) {};
		\node [style=vertex] (19) at (1,2) {};
		\node [style=vertex] (20) at (1,3) {};
		\node [style=vertex] (21) at (1,4) {};
		\node [style=vertex] (22) at (1,5) {};
		\node [style=vertex] (23) at (1,6) {};
		\node [style=vertex] (24) at (1,7) {};
		\node [style=vertex] (25) at (1,8) {};
		\node [style=vertex] (26) at (1,9) {};
		\node [style=vertex] (27) at (1,10) {};
		\node [style=vertex] (28) at (1,11) {};
		\node [style=vertex] (29) at (1,12) {};
		\node [style=vertex] (30) at (1,13) {};
		\node [style=vertex] (31) at (1,14) {};
		\node [style=vertex] (32) at (1,15) {};
		\node [style=vertex] (33) at (1,16) {};
		\node [style=vertex] (34) at (2,0) {};
		\node [style=vertex] (35) at (2,1) {};
		\node [style=vertex] (36) at (2,2) {};
		\node [style=vertex] (37) at (2,3) {};
		\node [style=vertex] (38) at (2,4) {};
		\node [style=vertex] (39) at (2,5) {};
		\node [style=vertex] (40) at (2,6) {};
		\node [style=vertex] (41) at (2,7) {};
		\node [style=vertex] (42) at (2,8) {};
		\node [style=vertex] (43) at (2,9) {};
		\node [style=vertex] (44) at (2,10) {};
		\node [style=vertex] (45) at (2,11) {};
		\node [style=vertex] (46) at (2,12) {};
		\node [style=vertex] (47) at (2,13) {};
		\node [style=vertex] (48) at (2,14) {};
		\node [style=vertex] (49) at (2,15) {};
		\node [style=vertex] (50) at (2,16) {};
		\node [style=vertex] (51) at (3,0) {};
		\node [style=vertex] (52) at (3,1) {};
		\node [style=vertex] (53) at (3,2) {};
		\node [style=vertex] (54) at (3,3) {};
		\node [style=vertex] (55) at (3,4) {};
		\node [style=vertex] (56) at (3,5) {};
		\node [style=vertex] (57) at (3,6) {};
		\node [style=vertex] (58) at (3,7) {};
		\node [style=vertex] (59) at (3,8) {};
		\node [style=vertex] (60) at (3,9) {};
		\node [style=vertex] (61) at (3,10) {};
		\node [style=vertex] (62) at (3,11) {};
		\node [style=vertex] (63) at (3,12) {};
		\node [style=vertex] (64) at (3,13) {};
		\node [style=vertex] (65) at (3,14) {};
		\node [style=vertex] (66) at (3,15) {};
		\node [style=vertex] (67) at (3,16) {};
		\node [style=vertex] (68) at (4,0) {};
		\node [style=vertex] (69) at (4,1) {};
		\node [style=vertex] (70) at (4,2) {};
		\node [style=vertex] (71) at (4,3) {};
		\node [style=vertex] (72) at (4,4) {};
		\node [style=vertex] (73) at (4,5) {};
		\node [style=vertex] (74) at (4,6) {};
		\node [style=vertex] (75) at (4,7) {};
		\node [style=vertex] (76) at (4,8) {};
		\node [style=vertex] (77) at (4,9) {};
		\node [style=vertex] (78) at (4,10) {};
		\node [style=vertex] (79) at (4,11) {};
		\node [style=vertex] (80) at (4,12) {};
		\node [style=vertex] (81) at (4,13) {};
		\node [style=vertex] (82) at (4,14) {};
		\node [style=vertex] (83) at (4,15) {};
		\node [style=vertex] (84) at (4,16) {};
		\node [style=vertex] (85) at (5,0) {};
		\node [style=vertex] (86) at (5,1) {};
		\node [style=vertex] (87) at (5,2) {};
		\node [style=vertex] (88) at (5,3) {};
		\node [style=vertex] (89) at (5,4) {};
		\node [style=vertex] (90) at (5,5) {};
		\node [style=vertex] (91) at (5,6) {};
		\node [style=vertex] (92) at (5,7) {};
		\node [style=vertex] (93) at (5,8) {};
		\node [style=vertex] (94) at (5,9) {};
		\node [style=vertex] (95) at (5,10) {};
		\node [style=vertex] (96) at (5,11) {};
		\node [style=vertex] (97) at (5,12) {};
		\node [style=vertex] (98) at (5,13) {};
		\node [style=vertex] (99) at (5,14) {};
		\node [style=vertex] (100) at (5,15) {};
		\node [style=vertex] (101) at (5,16) {};
		\node [style=vertex] (102) at (6,0) {};
		\node [style=vertex] (103) at (6,1) {};
		\node [style=vertex] (104) at (6,2) {};
		\node [style=vertex] (105) at (6,3) {};
		\node [style=vertex] (106) at (6,4) {};
		\node [style=vertex] (107) at (6,5) {};
		\node [style=vertex] (108) at (6,6) {};
		\node [style=vertex] (109) at (6,7) {};
		\node [style=vertex] (110) at (6,8) {};
		\node [style=vertex] (111) at (6,9) {};
		\node [style=vertex] (112) at (6,10) {};
		\node [style=vertex] (113) at (6,11) {};
		\node [style=vertex] (114) at (6,12) {};
		\node [style=vertex] (115) at (6,13) {};
		\node [style=vertex] (116) at (6,14) {};
		\node [style=vertex] (117) at (6,15) {};
		\node [style=vertex] (118) at (6,16) {};
		\node [style=vertex] (119) at (7,0) {};
		\node [style=vertex] (120) at (7,1) {};
		\node [style=vertex] (121) at (7,2) {};
		\node [style=vertex] (122) at (7,3) {};
		\node [style=vertex] (123) at (7,4) {};
		\node [style=vertex] (124) at (7,5) {};
		\node [style=vertex] (125) at (7,6) {};
		\node [style=vertex] (126) at (7,7) {};
		\node [style=vertex] (127) at (7,8) {};
		\node [style=vertex] (128) at (7,9) {};
		\node [style=vertex] (129) at (7,10) {};
		\node [style=vertex] (130) at (7,11) {};
		\node [style=vertex] (131) at (7,12) {};
		\node [style=vertex] (132) at (7,13) {};
		\node [style=vertex] (133) at (7,14) {};
		\node [style=vertex] (134) at (7,15) {};
		\node [style=vertex] (135) at (7,16) {};
		\node [style=vertex] (136) at (8,0) {};
		\node [style=vertex] (137) at (8,1) {};
		\node [style=vertex] (138) at (8,2) {};
		\node [style=vertex] (139) at (8,3) {};
		\node [style=vertex] (140) at (8,4) {};
		\node [style=vertex] (141) at (8,5) {};
		\node [style=vertex] (142) at (8,6) {};
		\node [style=vertex] (143) at (8,7) {};
		\node [style=vertex] (145) at (8,9) {};
		\node [style=vertex] (146) at (8,10) {};
		\node [style=vertex] (147) at (8,11) {};
		\node [style=vertex] (148) at (8,12) {};
		\node [style=vertex] (149) at (8,13) {};
		\node [style=vertex] (150) at (8,14) {};
		\node [style=vertex] (151) at (8,15) {};
		\node [style=vertex] (152) at (8,16) {};
		\node [style=vertex] (153) at (9,0) {};
		\node [style=vertex] (154) at (9,1) {};
		\node [style=vertex] (155) at (9,2) {};
		\node [style=vertex] (156) at (9,3) {};
		\node [style=vertex] (157) at (9,4) {};
		\node [style=vertex] (158) at (9,5) {};
		\node [style=vertex] (159) at (9,6) {};
		\node [style=vertex] (160) at (9,7) {};
		\node [style=vertex] (161) at (9,8) {};
		\node [style=vertex] (162) at (9,9) {};
		\node [style=vertex] (163) at (9,10) {};
		\node [style=vertex] (164) at (9,11) {};
		\node [style=vertex] (165) at (9,12) {};
		\node [style=vertex] (166) at (9,13) {};
		\node [style=vertex] (167) at (9,14) {};
		\node [style=vertex] (168) at (9,15) {};
		\node [style=vertex] (169) at (9,16) {};
		\node [style=vertex] (170) at (10,0) {};
		\node [style=vertex] (171) at (10,1) {};
		\node [style=vertex] (172) at (10,2) {};
		\node [style=vertex] (173) at (10,3) {};
		\node [style=vertex] (174) at (10,4) {};
		\node [style=vertex] (175) at (10,5) {};
		\node [style=vertex] (176) at (10,6) {};
		\node [style=vertex] (177) at (10,7) {};
		\node [style=vertex] (178) at (10,8) {};
		\node [style=vertex] (179) at (10,9) {};
		\node [style=vertex] (180) at (10,10) {};
		\node [style=vertex] (181) at (10,11) {};
		\node [style=vertex] (182) at (10,12) {};
		\node [style=vertex] (183) at (10,13) {};
		\node [style=vertex] (184) at (10,14) {};
		\node [style=vertex] (185) at (10,15) {};
		\node [style=vertex] (186) at (10,16) {};
		\node [style=vertex] (187) at (11,0) {};
		\node [style=vertex] (188) at (11,1) {};
		\node [style=vertex] (189) at (11,2) {};
		\node [style=vertex] (190) at (11,3) {};
		\node [style=vertex] (191) at (11,4) {};
		\node [style=vertex] (192) at (11,5) {};
		\node [style=vertex] (193) at (11,6) {};
		\node [style=vertex] (194) at (11,7) {};
		\node [style=vertex] (195) at (11,8) {};
		\node [style=vertex] (196) at (11,9) {};
		\node [style=vertex] (197) at (11,10) {};
		\node [style=vertex] (198) at (11,11) {};
		\node [style=vertex] (199) at (11,12) {};
		\node [style=vertex] (200) at (11,13) {};
		\node [style=vertex] (201) at (11,14) {};
		\node [style=vertex] (202) at (11,15) {};
		\node [style=vertex] (203) at (11,16) {};
		\node [style=vertex] (204) at (12,0) {};
		\node [style=vertex] (205) at (12,1) {};
		\node [style=vertex] (206) at (12,2) {};
		\node [style=vertex] (207) at (12,3) {};
		\node [style=vertex] (208) at (12,4) {};
		\node [style=vertex] (209) at (12,5) {};
		\node [style=vertex] (210) at (12,6) {};
		\node [style=vertex] (211) at (12,7) {};
		\node [style=vertex] (212) at (12,8) {};
		\node [style=vertex] (213) at (12,9) {};
		\node [style=vertex] (214) at (12,10) {};
		\node [style=vertex] (215) at (12,11) {};
		\node [style=vertex] (216) at (12,12) {};
		\node [style=vertex] (217) at (12,13) {};
		\node [style=vertex] (218) at (12,14) {};
		\node [style=vertex] (219) at (12,15) {};
		\node [style=vertex] (220) at (12,16) {};
		\node [style=vertex] (221) at (13,0) {};
		\node [style=vertex] (222) at (13,1) {};
		\node [style=vertex] (223) at (13,2) {};
		\node [style=vertex] (224) at (13,3) {};
		\node [style=vertex] (225) at (13,4) {};
		\node [style=vertex] (226) at (13,5) {};
		\node [style=vertex] (227) at (13,6) {};
		\node [style=vertex] (228) at (13,7) {};
		\node [style=vertex] (229) at (13,8) {};
		\node [style=vertex] (230) at (13,9) {};
		\node [style=vertex] (231) at (13,10) {};
		\node [style=vertex] (232) at (13,11) {};
		\node [style=vertex] (233) at (13,12) {};
		\node [style=vertex] (234) at (13,13) {};
		\node [style=vertex] (235) at (13,14) {};
		\node [style=vertex] (236) at (13,15) {};
		\node [style=vertex] (237) at (13,16) {};
		\node [style=vertex] (238) at (14,0) {};
		\node [style=vertex] (239) at (14,1) {};
		\node [style=vertex] (240) at (14,2) {};
		\node [style=vertex] (241) at (14,3) {};
		\node [style=vertex] (242) at (14,4) {};
		\node [style=vertex] (243) at (14,5) {};
		\node [style=vertex] (244) at (14,6) {};
		\node [style=vertex] (245) at (14,7) {};
		\node [style=vertex] (246) at (14,8) {};
		\node [style=vertex] (247) at (14,9) {};
		\node [style=vertex] (248) at (14,10) {};
		\node [style=vertex] (249) at (14,11) {};
		\node [style=vertex] (250) at (14,12) {};
		\node [style=vertex] (251) at (14,13) {};
		\node [style=vertex] (252) at (14,14) {};
		\node [style=vertex] (253) at (14,15) {};
		\node [style=vertex] (254) at (14,16) {};
		\node [style=vertex] (255) at (15,0) {};
		\node [style=vertex] (256) at (15,1) {};
		\node [style=vertex] (257) at (15,2) {};
		\node [style=vertex] (258) at (15,3) {};
		\node [style=vertex] (259) at (15,4) {};
		\node [style=vertex] (260) at (15,5) {};
		\node [style=vertex] (261) at (15,6) {};
		\node [style=vertex] (262) at (15,7) {};
		\node [style=vertex] (263) at (15,8) {};
		\node [style=vertex] (264) at (15,9) {};
		\node [style=vertex] (265) at (15,10) {};
		\node [style=vertex] (266) at (15,11) {};
		\node [style=vertex] (267) at (15,12) {};
		\node [style=vertex] (268) at (15,13) {};
		\node [style=vertex] (269) at (15,14) {};
		\node [style=vertex] (270) at (15,15) {};
		\node [style=vertex] (271) at (15,16) {};
		\node [style=vertex] (272) at (16,0) {};
		\node [style=vertex] (273) at (16,1) {};
		\node [style=vertex] (274) at (16,2) {};
		\node [style=vertex] (275) at (16,3) {};
		\node [style=vertex] (276) at (16,4) {};
		\node [style=vertex] (277) at (16,5) {};
		\node [style=vertex] (278) at (16,6) {};
		\node [style=vertex] (279) at (16,7) {};
		\node [style=vertex] (280) at (16,8) {};
		\node [style=vertex] (281) at (16,9) {};
		\node [style=vertex] (282) at (16,10) {};
		\node [style=vertex] (283) at (16,11) {};
		\node [style=vertex] (284) at (16,12) {};
		\node [style=vertex] (285) at (16,13) {};
		\node [style=vertex] (286) at (16,14) {};
		\node [style=vertex] (287) at (16,15) {};
		\node [style=vertex] (288) at (16,16) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (0) to (1);
		\draw (0) to (17);
		\draw (1) to (2);
		\draw (1) to (18);
		\draw (2) to (3);
		\draw (2) to (19);
		\draw (3) to (4);
		\draw (3) to (20);
		\draw (4) to (5);
		\draw (4) to (21);
		\draw (5) to (6);
		\draw (5) to (22);
		\draw (6) to (7);
		\draw (6) to (23);
		\draw (7) to (8);
		\draw (7) to (24);
		\draw (8) to (9);
		\draw (8) to (25);
		\draw (9) to (10);
		\draw (9) to (26);
		\draw (10) to (11);
		\draw (10) to (27);
		\draw (11) to (12);
		\draw (11) to (28);
		\draw (12) to (13);
		\draw (12) to (29);
		\draw (13) to (14);
		\draw (13) to (30);
		\draw (14) to (15);
		\draw (14) to (31);
		\draw (15) to (16);
		\draw (15) to (32);
		\draw (16) to (33);
		\draw (17) to (18);
		\draw (17) to (34);
		\draw (18) to (19);
		\draw (18) to (35);
		\draw (19) to (20);
		\draw (19) to (36);
		\draw (20) to (21);
		\draw (20) to (37);
		\draw (21) to (22);
		\draw (21) to (38);
		\draw (22) to (23);
		\draw (22) to (39);
		\draw (23) to (24);
		\draw (23) to (40);
		\draw (24) to (25);
		\draw (24) to (41);
		\draw (25) to (26);
		\draw (25) to (42);
		\draw (26) to (27);
		\draw (26) to (43);
		\draw (27) to (28);
		\draw (27) to (44);
		\draw (28) to (29);
		\draw (28) to (45);
		\draw (29) to (30);
		\draw (29) to (46);
		\draw (30) to (31);
		\draw (30) to (47);
		\draw (31) to (32);
		\draw (31) to (48);
		\draw (32) to (33);
		\draw (32) to (49);
		\draw (33) to (50);
		\draw (34) to (35);
		\draw (34) to (51);
		\draw (35) to (36);
		\draw (35) to (52);
		\draw (36) to (37);
		\draw (36) to (53);
		\draw (37) to (38);
		\draw (37) to (54);
		\draw (38) to (39);
		\draw (38) to (55);
		\draw (39) to (40);
		\draw (39) to (56);
		\draw (40) to (41);
		\draw (40) to (57);
		\draw (41) to (42);
		\draw (41) to (58);
		\draw (42) to (43);
		\draw (42) to (59);
		\draw (43) to (44);
		\draw (43) to (60);
		\draw (44) to (45);
		\draw (44) to (61);
		\draw (45) to (46);
		\draw (45) to (62);
		\draw (46) to (47);
		\draw (46) to (63);
		\draw (47) to (48);
		\draw (47) to (64);
		\draw (48) to (49);
		\draw (48) to (65);
		\draw (49) to (50);
		\draw (49) to (66);
		\draw (50) to (67);
		\draw (51) to (52);
		\draw (51) to (68);
		\draw (52) to (53);
		\draw (52) to (69);
		\draw (53) to (54);
		\draw (53) to (70);
		\draw (54) to (55);
		\draw (54) to (71);
		\draw (55) to (56);
		\draw (55) to (72);
		\draw (56) to (57);
		\draw (56) to (73);
		\draw (57) to (58);
		\draw (57) to (74);
		\draw (58) to (59);
		\draw (58) to (75);
		\draw (59) to (60);
		\draw (59) to (76);
		\draw (60) to (61);
		\draw (60) to (77);
		\draw (61) to (62);
		\draw (61) to (78);
		\draw (62) to (63);
		\draw (62) to (79);
		\draw (63) to (64);
		\draw (63) to (80);
		\draw (64) to (65);
		\draw (64) to (81);
		\draw (65) to (66);
		\draw (65) to (82);
		\draw (66) to (67);
		\draw (66) to (83);
		\draw (67) to (84);
		\draw (68) to (69);
		\draw (68) to (85);
		\draw (69) to (70);
		\draw (69) to (86);
		\draw (70) to (71);
		\draw (70) to (87);
		\draw (71) to (72);
		\draw (71) to (88);
		\draw (72) to (73);
		\draw (72) to (89);
		\draw (73) to (74);
		\draw (73) to (90);
		\draw (74) to (75);
		\draw (74) to (91);
		\draw (75) to (76);
		\draw (75) to (92);
		\draw (76) to (77);
		\draw (76) to (93);
		\draw (77) to (78);
		\draw (77) to (94);
		\draw (78) to (79);
		\draw (78) to (95);
		\draw (79) to (80);
		\draw (79) to (96);
		\draw (80) to (81);
		\draw (80) to (97);
		\draw (81) to (82);
		\draw (81) to (98);
		\draw (82) to (83);
		\draw (82) to (99);
		\draw (83) to (84);
		\draw (83) to (100);
		\draw (84) to (101);
		\draw (85) to (86);
		\draw (85) to (102);
		\draw (86) to (87);
		\draw (86) to (103);
		\draw (87) to (88);
		\draw (87) to (104);
		\draw (88) to (89);
		\draw (88) to (105);
		\draw (89) to (90);
		\draw (89) to (106);
		\draw (90) to (91);
		\draw (90) to (107);
		\draw (91) to (92);
		\draw (91) to (108);
		\draw (92) to (93);
		\draw (92) to (109);
		\draw (93) to (94);
		\draw (93) to (110);
		\draw (94) to (95);
		\draw (94) to (111);
		\draw (95) to (96);
		\draw (95) to (112);
		\draw (96) to (97);
		\draw (96) to (113);
		\draw (97) to (98);
		\draw (97) to (114);
		\draw (98) to (99);
		\draw (98) to (115);
		\draw (99) to (100);
		\draw (99) to (116);
		\draw (100) to (101);
		\draw (100) to (117);
		\draw (101) to (118);
		\draw (102) to (103);
		\draw (102) to (119);
		\draw (103) to (104);
		\draw (103) to (120);
		\draw (104) to (105);
		\draw (104) to (121);
		\draw (105) to (106);
		\draw (105) to (122);
		\draw (106) to (107);
		\draw (106) to (123);
		\draw (107) to (108);
		\draw (107) to (124);
		\draw (108) to (109);
		\draw (108) to (125);
		\draw (109) to (110);
		\draw (109) to (126);
		\draw (110) to (111);
		\draw (110) to (127);
		\draw (111) to (112);
		\draw (111) to (128);
		\draw (112) to (113);
		\draw (112) to (129);
		\draw (113) to (114);
		\draw (113) to (130);
		\draw (114) to (115);
		\draw (114) to (131);
		\draw (115) to (116);
		\draw (115) to (132);
		\draw (116) to (117);
		\draw (116) to (133);
		\draw (117) to (118);
		\draw (117) to (134);
		\draw (118) to (135);
		\draw (119) to (120);
		\draw (119) to (136);
		\draw (120) to (121);
		\draw (120) to (137);
		\draw (121) to (122);
		\draw (121) to (138);
		\draw (122) to (123);
		\draw (122) to (139);
		\draw (123) to (124);
		\draw (123) to (140);
		\draw (124) to (125);
		\draw (124) to (141);
		\draw (125) to (126);
		\draw (125) to (142);
		\draw (126) to (127);
		\draw (126) to (143);
		\draw (127) to (128);
		\draw (128) to (129);
		\draw (128) to (145);
		\draw (129) to (130);
		\draw (129) to (146);
		\draw (130) to (131);
		\draw (130) to (147);
		\draw (131) to (132);
		\draw (131) to (148);
		\draw (132) to (133);
		\draw (132) to (149);
		\draw (133) to (134);
		\draw (133) to (150);
		\draw (134) to (135);
		\draw (134) to (151);
		\draw (135) to (152);
		\draw (136) to (137);
		\draw (136) to (153);
		\draw (137) to (138);
		\draw (137) to (154);
		\draw (138) to (139);
		\draw (138) to (155);
		\draw (139) to (140);
		\draw (139) to (156);
		\draw (140) to (141);
		\draw (140) to (157);
		\draw (141) to (142);
		\draw (141) to (158);
		\draw (142) to (143);
		\draw (142) to (159);
		\draw (143) to (160);
		\draw (145) to (146);
		\draw (145) to (162);
		\draw (146) to (147);
		\draw (146) to (163);
		\draw (147) to (148);
		\draw (147) to (164);
		\draw (148) to (149);
		\draw (148) to (165);
		\draw (149) to (150);
		\draw (149) to (166);
		\draw (150) to (151);
		\draw (150) to (167);
		\draw (151) to (152);
		\draw (151) to (168);
		\draw (152) to (169);
		\draw (153) to (154);
		\draw (153) to (170);
		\draw (154) to (155);
		\draw (154) to (171);
		\draw (155) to (156);
		\draw (155) to (172);
		\draw (156) to (157);
		\draw (156) to (173);
		\draw (157) to (158);
		\draw (157) to (174);
		\draw (158) to (159);
		\draw (158) to (175);
		\draw (159) to (160);
		\draw (159) to (176);
		\draw (160) to (161);
		\draw (160) to (177);
		\draw (161) to (162);
		\draw (161) to (178);
		\draw (162) to (163);
		\draw (162) to (179);
		\draw (163) to (164);
		\draw (163) to (180);
		\draw (164) to (165);
		\draw (164) to (181);
		\draw (165) to (166);
		\draw (165) to (182);
		\draw (166) to (167);
		\draw (166) to (183);
		\draw (167) to (168);
		\draw (167) to (184);
		\draw (168) to (169);
		\draw (168) to (185);
		\draw (169) to (186);
		\draw (170) to (171);
		\draw (170) to (187);
		\draw (171) to (172);
		\draw (171) to (188);
		\draw (172) to (173);
		\draw (172) to (189);
		\draw (173) to (174);
		\draw (173) to (190);
		\draw (174) to (175);
		\draw (174) to (191);
		\draw (175) to (176);
		\draw (175) to (192);
		\draw (176) to (177);
		\draw (176) to (193);
		\draw (177) to (178);
		\draw (177) to (194);
		\draw (178) to (179);
		\draw (178) to (195);
		\draw (179) to (180);
		\draw (179) to (196);
		\draw (180) to (181);
		\draw (180) to (197);
		\draw (181) to (182);
		\draw (181) to (198);
		\draw (182) to (183);
		\draw (182) to (199);
		\draw (183) to (184);
		\draw (183) to (200);
		\draw (184) to (185);
		\draw (184) to (201);
		\draw (185) to (186);
		\draw (185) to (202);
		\draw (186) to (203);
		\draw (187) to (188);
		\draw (187) to (204);
		\draw (188) to (189);
		\draw (188) to (205);
		\draw (189) to (190);
		\draw (189) to (206);
		\draw (190) to (191);
		\draw (190) to (207);
		\draw (191) to (192);
		\draw (191) to (208);
		\draw (192) to (193);
		\draw (192) to (209);
		\draw (193) to (194);
		\draw (193) to (210);
		\draw (194) to (195);
		\draw (194) to (211);
		\draw (195) to (196);
		\draw (195) to (212);
		\draw (196) to (197);
		\draw (196) to (213);
		\draw (197) to (198);
		\draw (197) to (214);
		\draw (198) to (199);
		\draw (198) to (215);
		\draw (199) to (200);
		\draw (199) to (216);
		\draw (200) to (201);
		\draw (200) to (217);
		\draw (201) to (202);
		\draw (201) to (218);
		\draw (202) to (203);
		\draw (202) to (219);
		\draw (203) to (220);
		\draw (204) to (205);
		\draw (204) to (221);
		\draw (205) to (206);
		\draw (205) to (222);
		\draw (206) to (207);
		\draw (206) to (223);
		\draw (207) to (208);
		\draw (207) to (224);
		\draw (208) to (209);
		\draw (208) to (225);
		\draw (209) to (210);
		\draw (209) to (226);
		\draw (210) to (211);
		\draw (210) to (227);
		\draw (211) to (212);
		\draw (211) to (228);
		\draw (212) to (213);
		\draw (212) to (229);
		\draw (213) to (214);
		\draw (213) to (230);
		\draw (214) to (215);
		\draw (214) to (231);
		\draw (215) to (216);
		\draw (215) to (232);
		\draw (216) to (217);
		\draw (216) to (233);
		\draw (217) to (218);
		\draw (217) to (234);
		\draw (218) to (219);
		\draw (218) to (235);
		\draw (219) to (220);
		\draw (219) to (236);
		\draw (220) to (237);
		\draw (221) to (222);
		\draw (221) to (238);
		\draw (222) to (223);
		\draw (222) to (239);
		\draw (223) to (224);
		\draw (223) to (240);
		\draw (224) to (225);
		\draw (224) to (241);
		\draw (225) to (226);
		\draw (225) to (242);
		\draw (226) to (227);
		\draw (226) to (243);
		\draw (227) to (228);
		\draw (227) to (244);
		\draw (228) to (229);
		\draw (228) to (245);
		\draw (229) to (230);
		\draw (229) to (246);
		\draw (230) to (231);
		\draw (230) to (247);
		\draw (231) to (232);
		\draw (231) to (248);
		\draw (232) to (233);
		\draw (232) to (249);
		\draw (233) to (234);
		\draw (233) to (250);
		\draw (234) to (235);
		\draw (234) to (251);
		\draw (235) to (236);
		\draw (235) to (252);
		\draw (236) to (237);
		\draw (236) to (253);
		\draw (237) to (254);
		\draw (238) to (239);
		\draw (238) to (255);
		\draw (239) to (240);
		\draw (239) to (256);
		\draw (240) to (241);
		\draw (240) to (257);
		\draw (241) to (242);
		\draw (241) to (258);
		\draw (242) to (243);
		\draw (242) to (259);
		\draw (243) to (244);
		\draw (243) to (260);
		\draw (244) to (245);
		\draw (244) to (261);
		\draw (245) to (246);
		\draw (245) to (262);
		\draw (246) to (247);
		\draw (246) to (263);
		\draw (247) to (248);
		\draw (247) to (264);
		\draw (248) to (249);
		\draw (248) to (265);
		\draw (249) to (250);
		\draw (249) to (266);
		\draw (250) to (251);
		\draw (250) to (267);
		\draw (251) to (252);
		\draw (251) to (268);
		\draw (252) to (253);
		\draw (252) to (269);
		\draw (253) to (254);
		\draw (253) to (270);
		\draw (254) to (271);
		\draw (255) to (256);
		\draw (255) to (272);
		\draw (256) to (257);
		\draw (256) to (273);
		\draw (257) to (258);
		\draw (257) to (274);
		\draw (258) to (259);
		\draw (258) to (275);
		\draw (259) to (260);
		\draw (259) to (276);
		\draw (260) to (261);
		\draw (260) to (277);
		\draw (261) to (262);
		\draw (261) to (278);
		\draw (262) to (263);
		\draw (262) to (279);
		\draw (263) to (264);
		\draw (263) to (280);
		\draw (264) to (265);
		\draw (264) to (281);
		\draw (265) to (266);
		\draw (265) to (282);
		\draw (266) to (267);
		\draw (266) to (283);
		\draw (267) to (268);
		\draw (267) to (284);
		\draw (268) to (269);
		\draw (268) to (285);
		\draw (269) to (270);
		\draw (269) to (286);
		\draw (270) to (271);
		\draw (270) to (287);
		\draw (271) to (288);
		\draw (272) to (273);
		\draw (273) to (274);
		\draw (274) to (275);
		\draw (275) to (276);
		\draw (276) to (277);
		\draw (277) to (278);
		\draw (278) to (279);
		\draw (279) to (280);
		\draw (280) to (281);
		\draw (281) to (282);
		\draw (282) to (283);
		\draw (283) to (284);
		\draw (284) to (285);
		\draw (285) to (286);
		\draw (286) to (287);
		\draw (287) to (288);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[A planar code with one hole]{A planar code where we have removed one $2 \times 2$ square hole.}
\label{fig:planarRemoveOneLbyLSquare}
\end{figure}

\begin{ex}
At the opposite extreme, remove $1\times 1$ holes arranged in a $l\times l$ square grid from a larger square grid, each at distance 4 away from each other. See Figure \ref{fig:planarRemoveLbyLGridOf1by1} for an example with $l=2$. Now $m=n=4(l+1)$ so $N=2(4l+4)(4l+3)$, $k=l^2$ and $d=4$. So we get $k\sim \frac{1}{32}N$ with $d=4$ constant and $kd^2 \sim 0.5N$.
\end{ex}

\begin{figure}[htp]
\centering
\begin{tikzpicture}
	\begin{pgfonlayer}{backgroundlayer}
		\fill [black!20!white] (3,3) rectangle (4,4);
		\fill [black!20!white] (7,3) rectangle (8,4);
		\fill [black!20!white] (3,7) rectangle (4,8);
		\fill [black!20!white] (7,7) rectangle (8,8);
	\end{pgfonlayer}
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (0,0) {};
		\node [style=vertex] (1) at (0,1) {};
		\node [style=vertex] (2) at (0,2) {};
		\node [style=vertex] (3) at (0,3) {};
		\node [style=vertex] (4) at (0,4) {};
		\node [style=vertex] (5) at (0,5) {};
		\node [style=vertex] (6) at (0,6) {};
		\node [style=vertex] (7) at (0,7) {};
		\node [style=vertex] (8) at (0,8) {};
		\node [style=vertex] (9) at (0,9) {};
		\node [style=vertex] (10) at (0,10) {};
		\node [style=vertex] (11) at (0,11) {};
		\node [style=vertex] (12) at (1,0) {};
		\node [style=vertex] (13) at (1,1) {};
		\node [style=vertex] (14) at (1,2) {};
		\node [style=vertex] (15) at (1,3) {};
		\node [style=vertex] (16) at (1,4) {};
		\node [style=vertex] (17) at (1,5) {};
		\node [style=vertex] (18) at (1,6) {};
		\node [style=vertex] (19) at (1,7) {};
		\node [style=vertex] (20) at (1,8) {};
		\node [style=vertex] (21) at (1,9) {};
		\node [style=vertex] (22) at (1,10) {};
		\node [style=vertex] (23) at (1,11) {};
		\node [style=vertex] (24) at (2,0) {};
		\node [style=vertex] (25) at (2,1) {};
		\node [style=vertex] (26) at (2,2) {};
		\node [style=vertex] (27) at (2,3) {};
		\node [style=vertex] (28) at (2,4) {};
		\node [style=vertex] (29) at (2,5) {};
		\node [style=vertex] (30) at (2,6) {};
		\node [style=vertex] (31) at (2,7) {};
		\node [style=vertex] (32) at (2,8) {};
		\node [style=vertex] (33) at (2,9) {};
		\node [style=vertex] (34) at (2,10) {};
		\node [style=vertex] (35) at (2,11) {};
		\node [style=vertex] (36) at (3,0) {};
		\node [style=vertex] (37) at (3,1) {};
		\node [style=vertex] (38) at (3,2) {};
		\node [style=vertex] (39) at (3,3) {};
		\node [style=vertex] (40) at (3,4) {};
		\node [style=vertex] (41) at (3,5) {};
		\node [style=vertex] (42) at (3,6) {};
		\node [style=vertex] (43) at (3,7) {};
		\node [style=vertex] (44) at (3,8) {};
		\node [style=vertex] (45) at (3,9) {};
		\node [style=vertex] (46) at (3,10) {};
		\node [style=vertex] (47) at (3,11) {};
		\node [style=vertex] (48) at (4,0) {};
		\node [style=vertex] (49) at (4,1) {};
		\node [style=vertex] (50) at (4,2) {};
		\node [style=vertex] (51) at (4,3) {};
		\node [style=vertex] (52) at (4,4) {};
		\node [style=vertex] (53) at (4,5) {};
		\node [style=vertex] (54) at (4,6) {};
		\node [style=vertex] (55) at (4,7) {};
		\node [style=vertex] (56) at (4,8) {};
		\node [style=vertex] (57) at (4,9) {};
		\node [style=vertex] (58) at (4,10) {};
		\node [style=vertex] (59) at (4,11) {};
		\node [style=vertex] (60) at (5,0) {};
		\node [style=vertex] (61) at (5,1) {};
		\node [style=vertex] (62) at (5,2) {};
		\node [style=vertex] (63) at (5,3) {};
		\node [style=vertex] (64) at (5,4) {};
		\node [style=vertex] (65) at (5,5) {};
		\node [style=vertex] (66) at (5,6) {};
		\node [style=vertex] (67) at (5,7) {};
		\node [style=vertex] (68) at (5,8) {};
		\node [style=vertex] (69) at (5,9) {};
		\node [style=vertex] (70) at (5,10) {};
		\node [style=vertex] (71) at (5,11) {};
		\node [style=vertex] (72) at (6,0) {};
		\node [style=vertex] (73) at (6,1) {};
		\node [style=vertex] (74) at (6,2) {};
		\node [style=vertex] (75) at (6,3) {};
		\node [style=vertex] (76) at (6,4) {};
		\node [style=vertex] (77) at (6,5) {};
		\node [style=vertex] (78) at (6,6) {};
		\node [style=vertex] (79) at (6,7) {};
		\node [style=vertex] (80) at (6,8) {};
		\node [style=vertex] (81) at (6,9) {};
		\node [style=vertex] (82) at (6,10) {};
		\node [style=vertex] (83) at (6,11) {};
		\node [style=vertex] (84) at (7,0) {};
		\node [style=vertex] (85) at (7,1) {};
		\node [style=vertex] (86) at (7,2) {};
		\node [style=vertex] (87) at (7,3) {};
		\node [style=vertex] (88) at (7,4) {};
		\node [style=vertex] (89) at (7,5) {};
		\node [style=vertex] (90) at (7,6) {};
		\node [style=vertex] (91) at (7,7) {};
		\node [style=vertex] (92) at (7,8) {};
		\node [style=vertex] (93) at (7,9) {};
		\node [style=vertex] (94) at (7,10) {};
		\node [style=vertex] (95) at (7,11) {};
		\node [style=vertex] (96) at (8,0) {};
		\node [style=vertex] (97) at (8,1) {};
		\node [style=vertex] (98) at (8,2) {};
		\node [style=vertex] (99) at (8,3) {};
		\node [style=vertex] (100) at (8,4) {};
		\node [style=vertex] (101) at (8,5) {};
		\node [style=vertex] (102) at (8,6) {};
		\node [style=vertex] (103) at (8,7) {};
		\node [style=vertex] (104) at (8,8) {};
		\node [style=vertex] (105) at (8,9) {};
		\node [style=vertex] (106) at (8,10) {};
		\node [style=vertex] (107) at (8,11) {};
		\node [style=vertex] (108) at (9,0) {};
		\node [style=vertex] (109) at (9,1) {};
		\node [style=vertex] (110) at (9,2) {};
		\node [style=vertex] (111) at (9,3) {};
		\node [style=vertex] (112) at (9,4) {};
		\node [style=vertex] (113) at (9,5) {};
		\node [style=vertex] (114) at (9,6) {};
		\node [style=vertex] (115) at (9,7) {};
		\node [style=vertex] (116) at (9,8) {};
		\node [style=vertex] (117) at (9,9) {};
		\node [style=vertex] (118) at (9,10) {};
		\node [style=vertex] (119) at (9,11) {};
		\node [style=vertex] (120) at (10,0) {};
		\node [style=vertex] (121) at (10,1) {};
		\node [style=vertex] (122) at (10,2) {};
		\node [style=vertex] (123) at (10,3) {};
		\node [style=vertex] (124) at (10,4) {};
		\node [style=vertex] (125) at (10,5) {};
		\node [style=vertex] (126) at (10,6) {};
		\node [style=vertex] (127) at (10,7) {};
		\node [style=vertex] (128) at (10,8) {};
		\node [style=vertex] (129) at (10,9) {};
		\node [style=vertex] (130) at (10,10) {};
		\node [style=vertex] (131) at (10,11) {};
		\node [style=vertex] (132) at (11,0) {};
		\node [style=vertex] (133) at (11,1) {};
		\node [style=vertex] (134) at (11,2) {};
		\node [style=vertex] (135) at (11,3) {};
		\node [style=vertex] (136) at (11,4) {};
		\node [style=vertex] (137) at (11,5) {};
		\node [style=vertex] (138) at (11,6) {};
		\node [style=vertex] (139) at (11,7) {};
		\node [style=vertex] (140) at (11,8) {};
		\node [style=vertex] (141) at (11,9) {};
		\node [style=vertex] (142) at (11,10) {};
		\node [style=vertex] (143) at (11,11) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (0) to (1);
		\draw (0) to (12);
		\draw (1) to (2);
		\draw (1) to (13);
		\draw (2) to (3);
		\draw (2) to (14);
		\draw (3) to (4);
		\draw (3) to (15);
		\draw (4) to (5);
		\draw (4) to (16);
		\draw (5) to (6);
		\draw (5) to (17);
		\draw (6) to (7);
		\draw (6) to (18);
		\draw (7) to (8);
		\draw (7) to (19);
		\draw (8) to (9);
		\draw (8) to (20);
		\draw (9) to (10);
		\draw (9) to (21);
		\draw (10) to (11);
		\draw (10) to (22);
		\draw (11) to (23);
		\draw (12) to (13);
		\draw (12) to (24);
		\draw (13) to (14);
		\draw (13) to (25);
		\draw (14) to (15);
		\draw (14) to (26);
		\draw (15) to (16);
		\draw (15) to (27);
		\draw (16) to (17);
		\draw (16) to (28);
		\draw (17) to (18);
		\draw (17) to (29);
		\draw (18) to (19);
		\draw (18) to (30);
		\draw (19) to (20);
		\draw (19) to (31);
		\draw (20) to (21);
		\draw (20) to (32);
		\draw (21) to (22);
		\draw (21) to (33);
		\draw (22) to (23);
		\draw (22) to (34);
		\draw (23) to (35);
		\draw (24) to (25);
		\draw (24) to (36);
		\draw (25) to (26);
		\draw (25) to (37);
		\draw (26) to (27);
		\draw (26) to (38);
		\draw (27) to (28);
		\draw (27) to (39);
		\draw (28) to (29);
		\draw (28) to (40);
		\draw (29) to (30);
		\draw (29) to (41);
		\draw (30) to (31);
		\draw (30) to (42);
		\draw (31) to (32);
		\draw (31) to (43);
		\draw (32) to (33);
		\draw (32) to (44);
		\draw (33) to (34);
		\draw (33) to (45);
		\draw (34) to (35);
		\draw (34) to (46);
		\draw (35) to (47);
		\draw (36) to (37);
		\draw (36) to (48);
		\draw (37) to (38);
		\draw (37) to (49);
		\draw (38) to (39);
		\draw (38) to (50);
		\draw (39) to (40);
		\draw (39) to (51);
		\draw (40) to (41);
		\draw (40) to (52);
		\draw (41) to (42);
		\draw (41) to (53);
		\draw (42) to (43);
		\draw (42) to (54);
		\draw (43) to (44);
		\draw (43) to (55);
		\draw (44) to (45);
		\draw (44) to (56);
		\draw (45) to (46);
		\draw (45) to (57);
		\draw (46) to (47);
		\draw (46) to (58);
		\draw (47) to (59);
		\draw (48) to (49);
		\draw (48) to (60);
		\draw (49) to (50);
		\draw (49) to (61);
		\draw (50) to (51);
		\draw (50) to (62);
		\draw (51) to (52);
		\draw (51) to (63);
		\draw (52) to (53);
		\draw (52) to (64);
		\draw (53) to (54);
		\draw (53) to (65);
		\draw (54) to (55);
		\draw (54) to (66);
		\draw (55) to (56);
		\draw (55) to (67);
		\draw (56) to (57);
		\draw (56) to (68);
		\draw (57) to (58);
		\draw (57) to (69);
		\draw (58) to (59);
		\draw (58) to (70);
		\draw (59) to (71);
		\draw (60) to (61);
		\draw (60) to (72);
		\draw (61) to (62);
		\draw (61) to (73);
		\draw (62) to (63);
		\draw (62) to (74);
		\draw (63) to (64);
		\draw (63) to (75);
		\draw (64) to (65);
		\draw (64) to (76);
		\draw (65) to (66);
		\draw (65) to (77);
		\draw (66) to (67);
		\draw (66) to (78);
		\draw (67) to (68);
		\draw (67) to (79);
		\draw (68) to (69);
		\draw (68) to (80);
		\draw (69) to (70);
		\draw (69) to (81);
		\draw (70) to (71);
		\draw (70) to (82);
		\draw (71) to (83);
		\draw (72) to (73);
		\draw (72) to (84);
		\draw (73) to (74);
		\draw (73) to (85);
		\draw (74) to (75);
		\draw (74) to (86);
		\draw (75) to (76);
		\draw (75) to (87);
		\draw (76) to (77);
		\draw (76) to (88);
		\draw (77) to (78);
		\draw (77) to (89);
		\draw (78) to (79);
		\draw (78) to (90);
		\draw (79) to (80);
		\draw (79) to (91);
		\draw (80) to (81);
		\draw (80) to (92);
		\draw (81) to (82);
		\draw (81) to (93);
		\draw (82) to (83);
		\draw (82) to (94);
		\draw (83) to (95);
		\draw (84) to (85);
		\draw (84) to (96);
		\draw (85) to (86);
		\draw (85) to (97);
		\draw (86) to (87);
		\draw (86) to (98);
		\draw (87) to (88);
		\draw (87) to (99);
		\draw (88) to (89);
		\draw (88) to (100);
		\draw (89) to (90);
		\draw (89) to (101);
		\draw (90) to (91);
		\draw (90) to (102);
		\draw (91) to (92);
		\draw (91) to (103);
		\draw (92) to (93);
		\draw (92) to (104);
		\draw (93) to (94);
		\draw (93) to (105);
		\draw (94) to (95);
		\draw (94) to (106);
		\draw (95) to (107);
		\draw (96) to (97);
		\draw (96) to (108);
		\draw (97) to (98);
		\draw (97) to (109);
		\draw (98) to (99);
		\draw (98) to (110);
		\draw (99) to (100);
		\draw (99) to (111);
		\draw (100) to (101);
		\draw (100) to (112);
		\draw (101) to (102);
		\draw (101) to (113);
		\draw (102) to (103);
		\draw (102) to (114);
		\draw (103) to (104);
		\draw (103) to (115);
		\draw (104) to (105);
		\draw (104) to (116);
		\draw (105) to (106);
		\draw (105) to (117);
		\draw (106) to (107);
		\draw (106) to (118);
		\draw (107) to (119);
		\draw (108) to (109);
		\draw (108) to (120);
		\draw (109) to (110);
		\draw (109) to (121);
		\draw (110) to (111);
		\draw (110) to (122);
		\draw (111) to (112);
		\draw (111) to (123);
		\draw (112) to (113);
		\draw (112) to (124);
		\draw (113) to (114);
		\draw (113) to (125);
		\draw (114) to (115);
		\draw (114) to (126);
		\draw (115) to (116);
		\draw (115) to (127);
		\draw (116) to (117);
		\draw (116) to (128);
		\draw (117) to (118);
		\draw (117) to (129);
		\draw (118) to (119);
		\draw (118) to (130);
		\draw (119) to (131);
		\draw (120) to (121);
		\draw (120) to (132);
		\draw (121) to (122);
		\draw (121) to (133);
		\draw (122) to (123);
		\draw (122) to (134);
		\draw (123) to (124);
		\draw (123) to (135);
		\draw (124) to (125);
		\draw (124) to (136);
		\draw (125) to (126);
		\draw (125) to (137);
		\draw (126) to (127);
		\draw (126) to (138);
		\draw (127) to (128);
		\draw (127) to (139);
		\draw (128) to (129);
		\draw (128) to (140);
		\draw (129) to (130);
		\draw (129) to (141);
		\draw (130) to (131);
		\draw (130) to (142);
		\draw (131) to (143);
		\draw (132) to (133);
		\draw (133) to (134);
		\draw (134) to (135);
		\draw (135) to (136);
		\draw (136) to (137);
		\draw (137) to (138);
		\draw (138) to (139);
		\draw (139) to (140);
		\draw (140) to (141);
		\draw (141) to (142);
		\draw (142) to (143);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[A planar code with a grid of holes]{A planar code where we have removed a $2 \times 2$ grid of $1\times 1$ square holes.}
\label{fig:planarRemoveLbyLGridOf1by1}
\end{figure}

\begin{ex}
Remove $l\times l$ holes arranged in $l \times l$ grid, each hole $4l$ ladder distance away from other holes and edges. See Figure \ref{fig:planarRemoveLbyLGridOfLbyL} for an example with $l=2$. Then we must have $m=n=(4l)(l+1)+l=4l^2+5l$. Then $N=2(4l^2+5l)(4l^2+5l-1)-l^2(2l(l-1))\sim 30l^4$, $k=l^2$ and $d=4l$. So in this case $k\sim\sqrt{\frac{1}{30}N}$, $d\sim\sqrt[4]{\frac{128}{15}N}$ and $kd^2 \sim \frac{8}{15}N$.
\end{ex}

\begin{figure}[p]
\centering
\begin{tikzpicture}[x=0.5cm, y=0.5cm]
	\begin{pgfonlayer}{backgroundlayer}
		\fill [black!20!white] (7,7) rectangle (9,9);
		\fill [black!20!white] (16,7) rectangle (18,9);
		\fill [black!20!white] (7,16) rectangle (9,18);
		\fill [black!20!white] (16,16) rectangle (18,18);
	\end{pgfonlayer}
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (0) at (0,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (1) at (0,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (2) at (0,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (3) at (0,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (4) at (0,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (5) at (0,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (6) at (0,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (7) at (0,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (8) at (0,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (9) at (0,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (10) at (0,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (11) at (0,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (12) at (0,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (13) at (0,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (14) at (0,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (15) at (0,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (16) at (0,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (17) at (0,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (18) at (0,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (19) at (0,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (20) at (0,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (21) at (0,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (22) at (0,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (23) at (0,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (24) at (0,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (25) at (0,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (26) at (1,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (27) at (1,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (28) at (1,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (29) at (1,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (30) at (1,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (31) at (1,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (32) at (1,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (33) at (1,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (34) at (1,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (35) at (1,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (36) at (1,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (37) at (1,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (38) at (1,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (39) at (1,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (40) at (1,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (41) at (1,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (42) at (1,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (43) at (1,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (44) at (1,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (45) at (1,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (46) at (1,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (47) at (1,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (48) at (1,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (49) at (1,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (50) at (1,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (51) at (1,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (52) at (2,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (53) at (2,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (54) at (2,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (55) at (2,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (56) at (2,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (57) at (2,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (58) at (2,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (59) at (2,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (60) at (2,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (61) at (2,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (62) at (2,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (63) at (2,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (64) at (2,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (65) at (2,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (66) at (2,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (67) at (2,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (68) at (2,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (69) at (2,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (70) at (2,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (71) at (2,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (72) at (2,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (73) at (2,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (74) at (2,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (75) at (2,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (76) at (2,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (77) at (2,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (78) at (3,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (79) at (3,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (80) at (3,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (81) at (3,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (82) at (3,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (83) at (3,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (84) at (3,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (85) at (3,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (86) at (3,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (87) at (3,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (88) at (3,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (89) at (3,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (90) at (3,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (91) at (3,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (92) at (3,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (93) at (3,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (94) at (3,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (95) at (3,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (96) at (3,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (97) at (3,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (98) at (3,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (99) at (3,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (100) at (3,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (101) at (3,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (102) at (3,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (103) at (3,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (104) at (4,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (105) at (4,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (106) at (4,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (107) at (4,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (108) at (4,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (109) at (4,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (110) at (4,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (111) at (4,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (112) at (4,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (113) at (4,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (114) at (4,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (115) at (4,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (116) at (4,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (117) at (4,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (118) at (4,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (119) at (4,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (120) at (4,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (121) at (4,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (122) at (4,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (123) at (4,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (124) at (4,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (125) at (4,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (126) at (4,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (127) at (4,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (128) at (4,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (129) at (4,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (130) at (5,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (131) at (5,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (132) at (5,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (133) at (5,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (134) at (5,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (135) at (5,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (136) at (5,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (137) at (5,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (138) at (5,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (139) at (5,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (140) at (5,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (141) at (5,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (142) at (5,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (143) at (5,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (144) at (5,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (145) at (5,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (146) at (5,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (147) at (5,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (148) at (5,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (149) at (5,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (150) at (5,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (151) at (5,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (152) at (5,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (153) at (5,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (154) at (5,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (155) at (5,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (156) at (6,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (157) at (6,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (158) at (6,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (159) at (6,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (160) at (6,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (161) at (6,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (162) at (6,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (163) at (6,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (164) at (6,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (165) at (6,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (166) at (6,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (167) at (6,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (168) at (6,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (169) at (6,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (170) at (6,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (171) at (6,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (172) at (6,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (173) at (6,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (174) at (6,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (175) at (6,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (176) at (6,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (177) at (6,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (178) at (6,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (179) at (6,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (180) at (6,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (181) at (6,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (182) at (7,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (183) at (7,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (184) at (7,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (185) at (7,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (186) at (7,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (187) at (7,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (188) at (7,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (189) at (7,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (190) at (7,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (191) at (7,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (192) at (7,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (193) at (7,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (194) at (7,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (195) at (7,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (196) at (7,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (197) at (7,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (198) at (7,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (199) at (7,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (200) at (7,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (201) at (7,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (202) at (7,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (203) at (7,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (204) at (7,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (205) at (7,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (206) at (7,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (207) at (7,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (208) at (8,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (209) at (8,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (210) at (8,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (211) at (8,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (212) at (8,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (213) at (8,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (214) at (8,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (215) at (8,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (217) at (8,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (218) at (8,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (219) at (8,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (220) at (8,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (221) at (8,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (222) at (8,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (223) at (8,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (224) at (8,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (226) at (8,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (227) at (8,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (228) at (8,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (229) at (8,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (230) at (8,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (231) at (8,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (232) at (8,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (233) at (8,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (234) at (9,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (235) at (9,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (236) at (9,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (237) at (9,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (238) at (9,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (239) at (9,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (240) at (9,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (241) at (9,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (242) at (9,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (243) at (9,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (244) at (9,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (245) at (9,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (246) at (9,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (247) at (9,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (248) at (9,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (249) at (9,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (250) at (9,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (251) at (9,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (252) at (9,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (253) at (9,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (254) at (9,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (255) at (9,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (256) at (9,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (257) at (9,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (258) at (9,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (259) at (9,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (260) at (10,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (261) at (10,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (262) at (10,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (263) at (10,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (264) at (10,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (265) at (10,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (266) at (10,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (267) at (10,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (268) at (10,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (269) at (10,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (270) at (10,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (271) at (10,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (272) at (10,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (273) at (10,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (274) at (10,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (275) at (10,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (276) at (10,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (277) at (10,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (278) at (10,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (279) at (10,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (280) at (10,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (281) at (10,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (282) at (10,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (283) at (10,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (284) at (10,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (285) at (10,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (286) at (11,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (287) at (11,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (288) at (11,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (289) at (11,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (290) at (11,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (291) at (11,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (292) at (11,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (293) at (11,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (294) at (11,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (295) at (11,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (296) at (11,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (297) at (11,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (298) at (11,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (299) at (11,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (300) at (11,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (301) at (11,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (302) at (11,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (303) at (11,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (304) at (11,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (305) at (11,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (306) at (11,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (307) at (11,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (308) at (11,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (309) at (11,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (310) at (11,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (311) at (11,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (312) at (12,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (313) at (12,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (314) at (12,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (315) at (12,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (316) at (12,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (317) at (12,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (318) at (12,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (319) at (12,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (320) at (12,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (321) at (12,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (322) at (12,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (323) at (12,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (324) at (12,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (325) at (12,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (326) at (12,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (327) at (12,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (328) at (12,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (329) at (12,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (330) at (12,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (331) at (12,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (332) at (12,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (333) at (12,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (334) at (12,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (335) at (12,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (336) at (12,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (337) at (12,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (338) at (13,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (339) at (13,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (340) at (13,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (341) at (13,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (342) at (13,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (343) at (13,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (344) at (13,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (345) at (13,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (346) at (13,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (347) at (13,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (348) at (13,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (349) at (13,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (350) at (13,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (351) at (13,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (352) at (13,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (353) at (13,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (354) at (13,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (355) at (13,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (356) at (13,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (357) at (13,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (358) at (13,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (359) at (13,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (360) at (13,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (361) at (13,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (362) at (13,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (363) at (13,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (364) at (14,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (365) at (14,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (366) at (14,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (367) at (14,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (368) at (14,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (369) at (14,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (370) at (14,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (371) at (14,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (372) at (14,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (373) at (14,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (374) at (14,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (375) at (14,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (376) at (14,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (377) at (14,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (378) at (14,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (379) at (14,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (380) at (14,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (381) at (14,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (382) at (14,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (383) at (14,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (384) at (14,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (385) at (14,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (386) at (14,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (387) at (14,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (388) at (14,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (389) at (14,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (390) at (15,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (391) at (15,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (392) at (15,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (393) at (15,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (394) at (15,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (395) at (15,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (396) at (15,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (397) at (15,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (398) at (15,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (399) at (15,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (400) at (15,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (401) at (15,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (402) at (15,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (403) at (15,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (404) at (15,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (405) at (15,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (406) at (15,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (407) at (15,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (408) at (15,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (409) at (15,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (410) at (15,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (411) at (15,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (412) at (15,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (413) at (15,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (414) at (15,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (415) at (15,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (416) at (16,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (417) at (16,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (418) at (16,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (419) at (16,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (420) at (16,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (421) at (16,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (422) at (16,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (423) at (16,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (424) at (16,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (425) at (16,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (426) at (16,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (427) at (16,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (428) at (16,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (429) at (16,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (430) at (16,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (431) at (16,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (432) at (16,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (433) at (16,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (434) at (16,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (435) at (16,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (436) at (16,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (437) at (16,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (438) at (16,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (439) at (16,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (440) at (16,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (441) at (16,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (442) at (17,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (443) at (17,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (444) at (17,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (445) at (17,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (446) at (17,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (447) at (17,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (448) at (17,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (449) at (17,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (451) at (17,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (452) at (17,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (453) at (17,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (454) at (17,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (455) at (17,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (456) at (17,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (457) at (17,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (458) at (17,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (460) at (17,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (461) at (17,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (462) at (17,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (463) at (17,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (464) at (17,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (465) at (17,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (466) at (17,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (467) at (17,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (468) at (18,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (469) at (18,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (470) at (18,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (471) at (18,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (472) at (18,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (473) at (18,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (474) at (18,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (475) at (18,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (476) at (18,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (477) at (18,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (478) at (18,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (479) at (18,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (480) at (18,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (481) at (18,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (482) at (18,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (483) at (18,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (484) at (18,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (485) at (18,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (486) at (18,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (487) at (18,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (488) at (18,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (489) at (18,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (490) at (18,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (491) at (18,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (492) at (18,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (493) at (18,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (494) at (19,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (495) at (19,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (496) at (19,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (497) at (19,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (498) at (19,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (499) at (19,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (500) at (19,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (501) at (19,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (502) at (19,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (503) at (19,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (504) at (19,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (505) at (19,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (506) at (19,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (507) at (19,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (508) at (19,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (509) at (19,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (510) at (19,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (511) at (19,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (512) at (19,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (513) at (19,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (514) at (19,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (515) at (19,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (516) at (19,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (517) at (19,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (518) at (19,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (519) at (19,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (520) at (20,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (521) at (20,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (522) at (20,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (523) at (20,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (524) at (20,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (525) at (20,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (526) at (20,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (527) at (20,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (528) at (20,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (529) at (20,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (530) at (20,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (531) at (20,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (532) at (20,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (533) at (20,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (534) at (20,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (535) at (20,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (536) at (20,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (537) at (20,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (538) at (20,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (539) at (20,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (540) at (20,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (541) at (20,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (542) at (20,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (543) at (20,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (544) at (20,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (545) at (20,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (546) at (21,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (547) at (21,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (548) at (21,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (549) at (21,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (550) at (21,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (551) at (21,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (552) at (21,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (553) at (21,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (554) at (21,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (555) at (21,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (556) at (21,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (557) at (21,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (558) at (21,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (559) at (21,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (560) at (21,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (561) at (21,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (562) at (21,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (563) at (21,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (564) at (21,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (565) at (21,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (566) at (21,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (567) at (21,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (568) at (21,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (569) at (21,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (570) at (21,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (571) at (21,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (572) at (22,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (573) at (22,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (574) at (22,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (575) at (22,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (576) at (22,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (577) at (22,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (578) at (22,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (579) at (22,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (580) at (22,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (581) at (22,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (582) at (22,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (583) at (22,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (584) at (22,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (585) at (22,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (586) at (22,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (587) at (22,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (588) at (22,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (589) at (22,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (590) at (22,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (591) at (22,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (592) at (22,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (593) at (22,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (594) at (22,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (595) at (22,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (596) at (22,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (597) at (22,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (598) at (23,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (599) at (23,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (600) at (23,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (601) at (23,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (602) at (23,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (603) at (23,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (604) at (23,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (605) at (23,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (606) at (23,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (607) at (23,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (608) at (23,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (609) at (23,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (610) at (23,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (611) at (23,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (612) at (23,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (613) at (23,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (614) at (23,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (615) at (23,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (616) at (23,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (617) at (23,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (618) at (23,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (619) at (23,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (620) at (23,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (621) at (23,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (622) at (23,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (623) at (23,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (624) at (24,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (625) at (24,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (626) at (24,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (627) at (24,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (628) at (24,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (629) at (24,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (630) at (24,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (631) at (24,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (632) at (24,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (633) at (24,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (634) at (24,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (635) at (24,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (636) at (24,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (637) at (24,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (638) at (24,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (639) at (24,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (640) at (24,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (641) at (24,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (642) at (24,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (643) at (24,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (644) at (24,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (645) at (24,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (646) at (24,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (647) at (24,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (648) at (24,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (649) at (24,25) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (650) at (25,0) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (651) at (25,1) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (652) at (25,2) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (653) at (25,3) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (654) at (25,4) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (655) at (25,5) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (656) at (25,6) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (657) at (25,7) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (658) at (25,8) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (659) at (25,9) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (660) at (25,10) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (661) at (25,11) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (662) at (25,12) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (663) at (25,13) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (664) at (25,14) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (665) at (25,15) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (666) at (25,16) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (667) at (25,17) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (668) at (25,18) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (669) at (25,19) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (670) at (25,20) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (671) at (25,21) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (672) at (25,22) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (673) at (25,23) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (674) at (25,24) {};
		\node [style=vertex, minimum size=0.2cm, inner sep=0pt] (675) at (25,25) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (0) to (1);
		\draw (0) to (26);
		\draw (1) to (2);
		\draw (1) to (27);
		\draw (2) to (3);
		\draw (2) to (28);
		\draw (3) to (4);
		\draw (3) to (29);
		\draw (4) to (5);
		\draw (4) to (30);
		\draw (5) to (6);
		\draw (5) to (31);
		\draw (6) to (7);
		\draw (6) to (32);
		\draw (7) to (8);
		\draw (7) to (33);
		\draw (8) to (9);
		\draw (8) to (34);
		\draw (9) to (10);
		\draw (9) to (35);
		\draw (10) to (11);
		\draw (10) to (36);
		\draw (11) to (12);
		\draw (11) to (37);
		\draw (12) to (13);
		\draw (12) to (38);
		\draw (13) to (14);
		\draw (13) to (39);
		\draw (14) to (15);
		\draw (14) to (40);
		\draw (15) to (16);
		\draw (15) to (41);
		\draw (16) to (17);
		\draw (16) to (42);
		\draw (17) to (18);
		\draw (17) to (43);
		\draw (18) to (19);
		\draw (18) to (44);
		\draw (19) to (20);
		\draw (19) to (45);
		\draw (20) to (21);
		\draw (20) to (46);
		\draw (21) to (22);
		\draw (21) to (47);
		\draw (22) to (23);
		\draw (22) to (48);
		\draw (23) to (24);
		\draw (23) to (49);
		\draw (24) to (25);
		\draw (24) to (50);
		\draw (25) to (51);
		\draw (26) to (27);
		\draw (26) to (52);
		\draw (27) to (28);
		\draw (27) to (53);
		\draw (28) to (29);
		\draw (28) to (54);
		\draw (29) to (30);
		\draw (29) to (55);
		\draw (30) to (31);
		\draw (30) to (56);
		\draw (31) to (32);
		\draw (31) to (57);
		\draw (32) to (33);
		\draw (32) to (58);
		\draw (33) to (34);
		\draw (33) to (59);
		\draw (34) to (35);
		\draw (34) to (60);
		\draw (35) to (36);
		\draw (35) to (61);
		\draw (36) to (37);
		\draw (36) to (62);
		\draw (37) to (38);
		\draw (37) to (63);
		\draw (38) to (39);
		\draw (38) to (64);
		\draw (39) to (40);
		\draw (39) to (65);
		\draw (40) to (41);
		\draw (40) to (66);
		\draw (41) to (42);
		\draw (41) to (67);
		\draw (42) to (43);
		\draw (42) to (68);
		\draw (43) to (44);
		\draw (43) to (69);
		\draw (44) to (45);
		\draw (44) to (70);
		\draw (45) to (46);
		\draw (45) to (71);
		\draw (46) to (47);
		\draw (46) to (72);
		\draw (47) to (48);
		\draw (47) to (73);
		\draw (48) to (49);
		\draw (48) to (74);
		\draw (49) to (50);
		\draw (49) to (75);
		\draw (50) to (51);
		\draw (50) to (76);
		\draw (51) to (77);
		\draw (52) to (53);
		\draw (52) to (78);
		\draw (53) to (54);
		\draw (53) to (79);
		\draw (54) to (55);
		\draw (54) to (80);
		\draw (55) to (56);
		\draw (55) to (81);
		\draw (56) to (57);
		\draw (56) to (82);
		\draw (57) to (58);
		\draw (57) to (83);
		\draw (58) to (59);
		\draw (58) to (84);
		\draw (59) to (60);
		\draw (59) to (85);
		\draw (60) to (61);
		\draw (60) to (86);
		\draw (61) to (62);
		\draw (61) to (87);
		\draw (62) to (63);
		\draw (62) to (88);
		\draw (63) to (64);
		\draw (63) to (89);
		\draw (64) to (65);
		\draw (64) to (90);
		\draw (65) to (66);
		\draw (65) to (91);
		\draw (66) to (67);
		\draw (66) to (92);
		\draw (67) to (68);
		\draw (67) to (93);
		\draw (68) to (69);
		\draw (68) to (94);
		\draw (69) to (70);
		\draw (69) to (95);
		\draw (70) to (71);
		\draw (70) to (96);
		\draw (71) to (72);
		\draw (71) to (97);
		\draw (72) to (73);
		\draw (72) to (98);
		\draw (73) to (74);
		\draw (73) to (99);
		\draw (74) to (75);
		\draw (74) to (100);
		\draw (75) to (76);
		\draw (75) to (101);
		\draw (76) to (77);
		\draw (76) to (102);
		\draw (77) to (103);
		\draw (78) to (79);
		\draw (78) to (104);
		\draw (79) to (80);
		\draw (79) to (105);
		\draw (80) to (81);
		\draw (80) to (106);
		\draw (81) to (82);
		\draw (81) to (107);
		\draw (82) to (83);
		\draw (82) to (108);
		\draw (83) to (84);
		\draw (83) to (109);
		\draw (84) to (85);
		\draw (84) to (110);
		\draw (85) to (86);
		\draw (85) to (111);
		\draw (86) to (87);
		\draw (86) to (112);
		\draw (87) to (88);
		\draw (87) to (113);
		\draw (88) to (89);
		\draw (88) to (114);
		\draw (89) to (90);
		\draw (89) to (115);
		\draw (90) to (91);
		\draw (90) to (116);
		\draw (91) to (92);
		\draw (91) to (117);
		\draw (92) to (93);
		\draw (92) to (118);
		\draw (93) to (94);
		\draw (93) to (119);
		\draw (94) to (95);
		\draw (94) to (120);
		\draw (95) to (96);
		\draw (95) to (121);
		\draw (96) to (97);
		\draw (96) to (122);
		\draw (97) to (98);
		\draw (97) to (123);
		\draw (98) to (99);
		\draw (98) to (124);
		\draw (99) to (100);
		\draw (99) to (125);
		\draw (100) to (101);
		\draw (100) to (126);
		\draw (101) to (102);
		\draw (101) to (127);
		\draw (102) to (103);
		\draw (102) to (128);
		\draw (103) to (129);
		\draw (104) to (105);
		\draw (104) to (130);
		\draw (105) to (106);
		\draw (105) to (131);
		\draw (106) to (107);
		\draw (106) to (132);
		\draw (107) to (108);
		\draw (107) to (133);
		\draw (108) to (109);
		\draw (108) to (134);
		\draw (109) to (110);
		\draw (109) to (135);
		\draw (110) to (111);
		\draw (110) to (136);
		\draw (111) to (112);
		\draw (111) to (137);
		\draw (112) to (113);
		\draw (112) to (138);
		\draw (113) to (114);
		\draw (113) to (139);
		\draw (114) to (115);
		\draw (114) to (140);
		\draw (115) to (116);
		\draw (115) to (141);
		\draw (116) to (117);
		\draw (116) to (142);
		\draw (117) to (118);
		\draw (117) to (143);
		\draw (118) to (119);
		\draw (118) to (144);
		\draw (119) to (120);
		\draw (119) to (145);
		\draw (120) to (121);
		\draw (120) to (146);
		\draw (121) to (122);
		\draw (121) to (147);
		\draw (122) to (123);
		\draw (122) to (148);
		\draw (123) to (124);
		\draw (123) to (149);
		\draw (124) to (125);
		\draw (124) to (150);
		\draw (125) to (126);
		\draw (125) to (151);
		\draw (126) to (127);
		\draw (126) to (152);
		\draw (127) to (128);
		\draw (127) to (153);
		\draw (128) to (129);
		\draw (128) to (154);
		\draw (129) to (155);
		\draw (130) to (131);
		\draw (130) to (156);
		\draw (131) to (132);
		\draw (131) to (157);
		\draw (132) to (133);
		\draw (132) to (158);
		\draw (133) to (134);
		\draw (133) to (159);
		\draw (134) to (135);
		\draw (134) to (160);
		\draw (135) to (136);
		\draw (135) to (161);
		\draw (136) to (137);
		\draw (136) to (162);
		\draw (137) to (138);
		\draw (137) to (163);
		\draw (138) to (139);
		\draw (138) to (164);
		\draw (139) to (140);
		\draw (139) to (165);
		\draw (140) to (141);
		\draw (140) to (166);
		\draw (141) to (142);
		\draw (141) to (167);
		\draw (142) to (143);
		\draw (142) to (168);
		\draw (143) to (144);
		\draw (143) to (169);
		\draw (144) to (145);
		\draw (144) to (170);
		\draw (145) to (146);
		\draw (145) to (171);
		\draw (146) to (147);
		\draw (146) to (172);
		\draw (147) to (148);
		\draw (147) to (173);
		\draw (148) to (149);
		\draw (148) to (174);
		\draw (149) to (150);
		\draw (149) to (175);
		\draw (150) to (151);
		\draw (150) to (176);
		\draw (151) to (152);
		\draw (151) to (177);
		\draw (152) to (153);
		\draw (152) to (178);
		\draw (153) to (154);
		\draw (153) to (179);
		\draw (154) to (155);
		\draw (154) to (180);
		\draw (155) to (181);
		\draw (156) to (157);
		\draw (156) to (182);
		\draw (157) to (158);
		\draw (157) to (183);
		\draw (158) to (159);
		\draw (158) to (184);
		\draw (159) to (160);
		\draw (159) to (185);
		\draw (160) to (161);
		\draw (160) to (186);
		\draw (161) to (162);
		\draw (161) to (187);
		\draw (162) to (163);
		\draw (162) to (188);
		\draw (163) to (164);
		\draw (163) to (189);
		\draw (164) to (165);
		\draw (164) to (190);
		\draw (165) to (166);
		\draw (165) to (191);
		\draw (166) to (167);
		\draw (166) to (192);
		\draw (167) to (168);
		\draw (167) to (193);
		\draw (168) to (169);
		\draw (168) to (194);
		\draw (169) to (170);
		\draw (169) to (195);
		\draw (170) to (171);
		\draw (170) to (196);
		\draw (171) to (172);
		\draw (171) to (197);
		\draw (172) to (173);
		\draw (172) to (198);
		\draw (173) to (174);
		\draw (173) to (199);
		\draw (174) to (175);
		\draw (174) to (200);
		\draw (175) to (176);
		\draw (175) to (201);
		\draw (176) to (177);
		\draw (176) to (202);
		\draw (177) to (178);
		\draw (177) to (203);
		\draw (178) to (179);
		\draw (178) to (204);
		\draw (179) to (180);
		\draw (179) to (205);
		\draw (180) to (181);
		\draw (180) to (206);
		\draw (181) to (207);
		\draw (182) to (183);
		\draw (182) to (208);
		\draw (183) to (184);
		\draw (183) to (209);
		\draw (184) to (185);
		\draw (184) to (210);
		\draw (185) to (186);
		\draw (185) to (211);
		\draw (186) to (187);
		\draw (186) to (212);
		\draw (187) to (188);
		\draw (187) to (213);
		\draw (188) to (189);
		\draw (188) to (214);
		\draw (189) to (190);
		\draw (189) to (215);
		\draw (190) to (191);
		\draw (191) to (192);
		\draw (191) to (217);
		\draw (192) to (193);
		\draw (192) to (218);
		\draw (193) to (194);
		\draw (193) to (219);
		\draw (194) to (195);
		\draw (194) to (220);
		\draw (195) to (196);
		\draw (195) to (221);
		\draw (196) to (197);
		\draw (196) to (222);
		\draw (197) to (198);
		\draw (197) to (223);
		\draw (198) to (199);
		\draw (198) to (224);
		\draw (199) to (200);
		\draw (200) to (201);
		\draw (200) to (226);
		\draw (201) to (202);
		\draw (201) to (227);
		\draw (202) to (203);
		\draw (202) to (228);
		\draw (203) to (204);
		\draw (203) to (229);
		\draw (204) to (205);
		\draw (204) to (230);
		\draw (205) to (206);
		\draw (205) to (231);
		\draw (206) to (207);
		\draw (206) to (232);
		\draw (207) to (233);
		\draw (208) to (209);
		\draw (208) to (234);
		\draw (209) to (210);
		\draw (209) to (235);
		\draw (210) to (211);
		\draw (210) to (236);
		\draw (211) to (212);
		\draw (211) to (237);
		\draw (212) to (213);
		\draw (212) to (238);
		\draw (213) to (214);
		\draw (213) to (239);
		\draw (214) to (215);
		\draw (214) to (240);
		\draw (215) to (241);
		\draw (217) to (218);
		\draw (217) to (243);
		\draw (218) to (219);
		\draw (218) to (244);
		\draw (219) to (220);
		\draw (219) to (245);
		\draw (220) to (221);
		\draw (220) to (246);
		\draw (221) to (222);
		\draw (221) to (247);
		\draw (222) to (223);
		\draw (222) to (248);
		\draw (223) to (224);
		\draw (223) to (249);
		\draw (224) to (250);
		\draw (226) to (227);
		\draw (226) to (252);
		\draw (227) to (228);
		\draw (227) to (253);
		\draw (228) to (229);
		\draw (228) to (254);
		\draw (229) to (230);
		\draw (229) to (255);
		\draw (230) to (231);
		\draw (230) to (256);
		\draw (231) to (232);
		\draw (231) to (257);
		\draw (232) to (233);
		\draw (232) to (258);
		\draw (233) to (259);
		\draw (234) to (235);
		\draw (234) to (260);
		\draw (235) to (236);
		\draw (235) to (261);
		\draw (236) to (237);
		\draw (236) to (262);
		\draw (237) to (238);
		\draw (237) to (263);
		\draw (238) to (239);
		\draw (238) to (264);
		\draw (239) to (240);
		\draw (239) to (265);
		\draw (240) to (241);
		\draw (240) to (266);
		\draw (241) to (242);
		\draw (241) to (267);
		\draw (242) to (243);
		\draw (242) to (268);
		\draw (243) to (244);
		\draw (243) to (269);
		\draw (244) to (245);
		\draw (244) to (270);
		\draw (245) to (246);
		\draw (245) to (271);
		\draw (246) to (247);
		\draw (246) to (272);
		\draw (247) to (248);
		\draw (247) to (273);
		\draw (248) to (249);
		\draw (248) to (274);
		\draw (249) to (250);
		\draw (249) to (275);
		\draw (250) to (251);
		\draw (250) to (276);
		\draw (251) to (252);
		\draw (251) to (277);
		\draw (252) to (253);
		\draw (252) to (278);
		\draw (253) to (254);
		\draw (253) to (279);
		\draw (254) to (255);
		\draw (254) to (280);
		\draw (255) to (256);
		\draw (255) to (281);
		\draw (256) to (257);
		\draw (256) to (282);
		\draw (257) to (258);
		\draw (257) to (283);
		\draw (258) to (259);
		\draw (258) to (284);
		\draw (259) to (285);
		\draw (260) to (261);
		\draw (260) to (286);
		\draw (261) to (262);
		\draw (261) to (287);
		\draw (262) to (263);
		\draw (262) to (288);
		\draw (263) to (264);
		\draw (263) to (289);
		\draw (264) to (265);
		\draw (264) to (290);
		\draw (265) to (266);
		\draw (265) to (291);
		\draw (266) to (267);
		\draw (266) to (292);
		\draw (267) to (268);
		\draw (267) to (293);
		\draw (268) to (269);
		\draw (268) to (294);
		\draw (269) to (270);
		\draw (269) to (295);
		\draw (270) to (271);
		\draw (270) to (296);
		\draw (271) to (272);
		\draw (271) to (297);
		\draw (272) to (273);
		\draw (272) to (298);
		\draw (273) to (274);
		\draw (273) to (299);
		\draw (274) to (275);
		\draw (274) to (300);
		\draw (275) to (276);
		\draw (275) to (301);
		\draw (276) to (277);
		\draw (276) to (302);
		\draw (277) to (278);
		\draw (277) to (303);
		\draw (278) to (279);
		\draw (278) to (304);
		\draw (279) to (280);
		\draw (279) to (305);
		\draw (280) to (281);
		\draw (280) to (306);
		\draw (281) to (282);
		\draw (281) to (307);
		\draw (282) to (283);
		\draw (282) to (308);
		\draw (283) to (284);
		\draw (283) to (309);
		\draw (284) to (285);
		\draw (284) to (310);
		\draw (285) to (311);
		\draw (286) to (287);
		\draw (286) to (312);
		\draw (287) to (288);
		\draw (287) to (313);
		\draw (288) to (289);
		\draw (288) to (314);
		\draw (289) to (290);
		\draw (289) to (315);
		\draw (290) to (291);
		\draw (290) to (316);
		\draw (291) to (292);
		\draw (291) to (317);
		\draw (292) to (293);
		\draw (292) to (318);
		\draw (293) to (294);
		\draw (293) to (319);
		\draw (294) to (295);
		\draw (294) to (320);
		\draw (295) to (296);
		\draw (295) to (321);
		\draw (296) to (297);
		\draw (296) to (322);
		\draw (297) to (298);
		\draw (297) to (323);
		\draw (298) to (299);
		\draw (298) to (324);
		\draw (299) to (300);
		\draw (299) to (325);
		\draw (300) to (301);
		\draw (300) to (326);
		\draw (301) to (302);
		\draw (301) to (327);
		\draw (302) to (303);
		\draw (302) to (328);
		\draw (303) to (304);
		\draw (303) to (329);
		\draw (304) to (305);
		\draw (304) to (330);
		\draw (305) to (306);
		\draw (305) to (331);
		\draw (306) to (307);
		\draw (306) to (332);
		\draw (307) to (308);
		\draw (307) to (333);
		\draw (308) to (309);
		\draw (308) to (334);
		\draw (309) to (310);
		\draw (309) to (335);
		\draw (310) to (311);
		\draw (310) to (336);
		\draw (311) to (337);
		\draw (312) to (313);
		\draw (312) to (338);
		\draw (313) to (314);
		\draw (313) to (339);
		\draw (314) to (315);
		\draw (314) to (340);
		\draw (315) to (316);
		\draw (315) to (341);
		\draw (316) to (317);
		\draw (316) to (342);
		\draw (317) to (318);
		\draw (317) to (343);
		\draw (318) to (319);
		\draw (318) to (344);
		\draw (319) to (320);
		\draw (319) to (345);
		\draw (320) to (321);
		\draw (320) to (346);
		\draw (321) to (322);
		\draw (321) to (347);
		\draw (322) to (323);
		\draw (322) to (348);
		\draw (323) to (324);
		\draw (323) to (349);
		\draw (324) to (325);
		\draw (324) to (350);
		\draw (325) to (326);
		\draw (325) to (351);
		\draw (326) to (327);
		\draw (326) to (352);
		\draw (327) to (328);
		\draw (327) to (353);
		\draw (328) to (329);
		\draw (328) to (354);
		\draw (329) to (330);
		\draw (329) to (355);
		\draw (330) to (331);
		\draw (330) to (356);
		\draw (331) to (332);
		\draw (331) to (357);
		\draw (332) to (333);
		\draw (332) to (358);
		\draw (333) to (334);
		\draw (333) to (359);
		\draw (334) to (335);
		\draw (334) to (360);
		\draw (335) to (336);
		\draw (335) to (361);
		\draw (336) to (337);
		\draw (336) to (362);
		\draw (337) to (363);
		\draw (338) to (339);
		\draw (338) to (364);
		\draw (339) to (340);
		\draw (339) to (365);
		\draw (340) to (341);
		\draw (340) to (366);
		\draw (341) to (342);
		\draw (341) to (367);
		\draw (342) to (343);
		\draw (342) to (368);
		\draw (343) to (344);
		\draw (343) to (369);
		\draw (344) to (345);
		\draw (344) to (370);
		\draw (345) to (346);
		\draw (345) to (371);
		\draw (346) to (347);
		\draw (346) to (372);
		\draw (347) to (348);
		\draw (347) to (373);
		\draw (348) to (349);
		\draw (348) to (374);
		\draw (349) to (350);
		\draw (349) to (375);
		\draw (350) to (351);
		\draw (350) to (376);
		\draw (351) to (352);
		\draw (351) to (377);
		\draw (352) to (353);
		\draw (352) to (378);
		\draw (353) to (354);
		\draw (353) to (379);
		\draw (354) to (355);
		\draw (354) to (380);
		\draw (355) to (356);
		\draw (355) to (381);
		\draw (356) to (357);
		\draw (356) to (382);
		\draw (357) to (358);
		\draw (357) to (383);
		\draw (358) to (359);
		\draw (358) to (384);
		\draw (359) to (360);
		\draw (359) to (385);
		\draw (360) to (361);
		\draw (360) to (386);
		\draw (361) to (362);
		\draw (361) to (387);
		\draw (362) to (363);
		\draw (362) to (388);
		\draw (363) to (389);
		\draw (364) to (365);
		\draw (364) to (390);
		\draw (365) to (366);
		\draw (365) to (391);
		\draw (366) to (367);
		\draw (366) to (392);
		\draw (367) to (368);
		\draw (367) to (393);
		\draw (368) to (369);
		\draw (368) to (394);
		\draw (369) to (370);
		\draw (369) to (395);
		\draw (370) to (371);
		\draw (370) to (396);
		\draw (371) to (372);
		\draw (371) to (397);
		\draw (372) to (373);
		\draw (372) to (398);
		\draw (373) to (374);
		\draw (373) to (399);
		\draw (374) to (375);
		\draw (374) to (400);
		\draw (375) to (376);
		\draw (375) to (401);
		\draw (376) to (377);
		\draw (376) to (402);
		\draw (377) to (378);
		\draw (377) to (403);
		\draw (378) to (379);
		\draw (378) to (404);
		\draw (379) to (380);
		\draw (379) to (405);
		\draw (380) to (381);
		\draw (380) to (406);
		\draw (381) to (382);
		\draw (381) to (407);
		\draw (382) to (383);
		\draw (382) to (408);
		\draw (383) to (384);
		\draw (383) to (409);
		\draw (384) to (385);
		\draw (384) to (410);
		\draw (385) to (386);
		\draw (385) to (411);
		\draw (386) to (387);
		\draw (386) to (412);
		\draw (387) to (388);
		\draw (387) to (413);
		\draw (388) to (389);
		\draw (388) to (414);
		\draw (389) to (415);
		\draw (390) to (391);
		\draw (390) to (416);
		\draw (391) to (392);
		\draw (391) to (417);
		\draw (392) to (393);
		\draw (392) to (418);
		\draw (393) to (394);
		\draw (393) to (419);
		\draw (394) to (395);
		\draw (394) to (420);
		\draw (395) to (396);
		\draw (395) to (421);
		\draw (396) to (397);
		\draw (396) to (422);
		\draw (397) to (398);
		\draw (397) to (423);
		\draw (398) to (399);
		\draw (398) to (424);
		\draw (399) to (400);
		\draw (399) to (425);
		\draw (400) to (401);
		\draw (400) to (426);
		\draw (401) to (402);
		\draw (401) to (427);
		\draw (402) to (403);
		\draw (402) to (428);
		\draw (403) to (404);
		\draw (403) to (429);
		\draw (404) to (405);
		\draw (404) to (430);
		\draw (405) to (406);
		\draw (405) to (431);
		\draw (406) to (407);
		\draw (406) to (432);
		\draw (407) to (408);
		\draw (407) to (433);
		\draw (408) to (409);
		\draw (408) to (434);
		\draw (409) to (410);
		\draw (409) to (435);
		\draw (410) to (411);
		\draw (410) to (436);
		\draw (411) to (412);
		\draw (411) to (437);
		\draw (412) to (413);
		\draw (412) to (438);
		\draw (413) to (414);
		\draw (413) to (439);
		\draw (414) to (415);
		\draw (414) to (440);
		\draw (415) to (441);
		\draw (416) to (417);
		\draw (416) to (442);
		\draw (417) to (418);
		\draw (417) to (443);
		\draw (418) to (419);
		\draw (418) to (444);
		\draw (419) to (420);
		\draw (419) to (445);
		\draw (420) to (421);
		\draw (420) to (446);
		\draw (421) to (422);
		\draw (421) to (447);
		\draw (422) to (423);
		\draw (422) to (448);
		\draw (423) to (424);
		\draw (423) to (449);
		\draw (424) to (425);
		\draw (425) to (426);
		\draw (425) to (451);
		\draw (426) to (427);
		\draw (426) to (452);
		\draw (427) to (428);
		\draw (427) to (453);
		\draw (428) to (429);
		\draw (428) to (454);
		\draw (429) to (430);
		\draw (429) to (455);
		\draw (430) to (431);
		\draw (430) to (456);
		\draw (431) to (432);
		\draw (431) to (457);
		\draw (432) to (433);
		\draw (432) to (458);
		\draw (433) to (434);
		\draw (434) to (435);
		\draw (434) to (460);
		\draw (435) to (436);
		\draw (435) to (461);
		\draw (436) to (437);
		\draw (436) to (462);
		\draw (437) to (438);
		\draw (437) to (463);
		\draw (438) to (439);
		\draw (438) to (464);
		\draw (439) to (440);
		\draw (439) to (465);
		\draw (440) to (441);
		\draw (440) to (466);
		\draw (441) to (467);
		\draw (442) to (443);
		\draw (442) to (468);
		\draw (443) to (444);
		\draw (443) to (469);
		\draw (444) to (445);
		\draw (444) to (470);
		\draw (445) to (446);
		\draw (445) to (471);
		\draw (446) to (447);
		\draw (446) to (472);
		\draw (447) to (448);
		\draw (447) to (473);
		\draw (448) to (449);
		\draw (448) to (474);
		\draw (449) to (475);
		\draw (451) to (452);
		\draw (451) to (477);
		\draw (452) to (453);
		\draw (452) to (478);
		\draw (453) to (454);
		\draw (453) to (479);
		\draw (454) to (455);
		\draw (454) to (480);
		\draw (455) to (456);
		\draw (455) to (481);
		\draw (456) to (457);
		\draw (456) to (482);
		\draw (457) to (458);
		\draw (457) to (483);
		\draw (458) to (484);
		\draw (460) to (461);
		\draw (460) to (486);
		\draw (461) to (462);
		\draw (461) to (487);
		\draw (462) to (463);
		\draw (462) to (488);
		\draw (463) to (464);
		\draw (463) to (489);
		\draw (464) to (465);
		\draw (464) to (490);
		\draw (465) to (466);
		\draw (465) to (491);
		\draw (466) to (467);
		\draw (466) to (492);
		\draw (467) to (493);
		\draw (468) to (469);
		\draw (468) to (494);
		\draw (469) to (470);
		\draw (469) to (495);
		\draw (470) to (471);
		\draw (470) to (496);
		\draw (471) to (472);
		\draw (471) to (497);
		\draw (472) to (473);
		\draw (472) to (498);
		\draw (473) to (474);
		\draw (473) to (499);
		\draw (474) to (475);
		\draw (474) to (500);
		\draw (475) to (476);
		\draw (475) to (501);
		\draw (476) to (477);
		\draw (476) to (502);
		\draw (477) to (478);
		\draw (477) to (503);
		\draw (478) to (479);
		\draw (478) to (504);
		\draw (479) to (480);
		\draw (479) to (505);
		\draw (480) to (481);
		\draw (480) to (506);
		\draw (481) to (482);
		\draw (481) to (507);
		\draw (482) to (483);
		\draw (482) to (508);
		\draw (483) to (484);
		\draw (483) to (509);
		\draw (484) to (485);
		\draw (484) to (510);
		\draw (485) to (486);
		\draw (485) to (511);
		\draw (486) to (487);
		\draw (486) to (512);
		\draw (487) to (488);
		\draw (487) to (513);
		\draw (488) to (489);
		\draw (488) to (514);
		\draw (489) to (490);
		\draw (489) to (515);
		\draw (490) to (491);
		\draw (490) to (516);
		\draw (491) to (492);
		\draw (491) to (517);
		\draw (492) to (493);
		\draw (492) to (518);
		\draw (493) to (519);
		\draw (494) to (495);
		\draw (494) to (520);
		\draw (495) to (496);
		\draw (495) to (521);
		\draw (496) to (497);
		\draw (496) to (522);
		\draw (497) to (498);
		\draw (497) to (523);
		\draw (498) to (499);
		\draw (498) to (524);
		\draw (499) to (500);
		\draw (499) to (525);
		\draw (500) to (501);
		\draw (500) to (526);
		\draw (501) to (502);
		\draw (501) to (527);
		\draw (502) to (503);
		\draw (502) to (528);
		\draw (503) to (504);
		\draw (503) to (529);
		\draw (504) to (505);
		\draw (504) to (530);
		\draw (505) to (506);
		\draw (505) to (531);
		\draw (506) to (507);
		\draw (506) to (532);
		\draw (507) to (508);
		\draw (507) to (533);
		\draw (508) to (509);
		\draw (508) to (534);
		\draw (509) to (510);
		\draw (509) to (535);
		\draw (510) to (511);
		\draw (510) to (536);
		\draw (511) to (512);
		\draw (511) to (537);
		\draw (512) to (513);
		\draw (512) to (538);
		\draw (513) to (514);
		\draw (513) to (539);
		\draw (514) to (515);
		\draw (514) to (540);
		\draw (515) to (516);
		\draw (515) to (541);
		\draw (516) to (517);
		\draw (516) to (542);
		\draw (517) to (518);
		\draw (517) to (543);
		\draw (518) to (519);
		\draw (518) to (544);
		\draw (519) to (545);
		\draw (520) to (521);
		\draw (520) to (546);
		\draw (521) to (522);
		\draw (521) to (547);
		\draw (522) to (523);
		\draw (522) to (548);
		\draw (523) to (524);
		\draw (523) to (549);
		\draw (524) to (525);
		\draw (524) to (550);
		\draw (525) to (526);
		\draw (525) to (551);
		\draw (526) to (527);
		\draw (526) to (552);
		\draw (527) to (528);
		\draw (527) to (553);
		\draw (528) to (529);
		\draw (528) to (554);
		\draw (529) to (530);
		\draw (529) to (555);
		\draw (530) to (531);
		\draw (530) to (556);
		\draw (531) to (532);
		\draw (531) to (557);
		\draw (532) to (533);
		\draw (532) to (558);
		\draw (533) to (534);
		\draw (533) to (559);
		\draw (534) to (535);
		\draw (534) to (560);
		\draw (535) to (536);
		\draw (535) to (561);
		\draw (536) to (537);
		\draw (536) to (562);
		\draw (537) to (538);
		\draw (537) to (563);
		\draw (538) to (539);
		\draw (538) to (564);
		\draw (539) to (540);
		\draw (539) to (565);
		\draw (540) to (541);
		\draw (540) to (566);
		\draw (541) to (542);
		\draw (541) to (567);
		\draw (542) to (543);
		\draw (542) to (568);
		\draw (543) to (544);
		\draw (543) to (569);
		\draw (544) to (545);
		\draw (544) to (570);
		\draw (545) to (571);
		\draw (546) to (547);
		\draw (546) to (572);
		\draw (547) to (548);
		\draw (547) to (573);
		\draw (548) to (549);
		\draw (548) to (574);
		\draw (549) to (550);
		\draw (549) to (575);
		\draw (550) to (551);
		\draw (550) to (576);
		\draw (551) to (552);
		\draw (551) to (577);
		\draw (552) to (553);
		\draw (552) to (578);
		\draw (553) to (554);
		\draw (553) to (579);
		\draw (554) to (555);
		\draw (554) to (580);
		\draw (555) to (556);
		\draw (555) to (581);
		\draw (556) to (557);
		\draw (556) to (582);
		\draw (557) to (558);
		\draw (557) to (583);
		\draw (558) to (559);
		\draw (558) to (584);
		\draw (559) to (560);
		\draw (559) to (585);
		\draw (560) to (561);
		\draw (560) to (586);
		\draw (561) to (562);
		\draw (561) to (587);
		\draw (562) to (563);
		\draw (562) to (588);
		\draw (563) to (564);
		\draw (563) to (589);
		\draw (564) to (565);
		\draw (564) to (590);
		\draw (565) to (566);
		\draw (565) to (591);
		\draw (566) to (567);
		\draw (566) to (592);
		\draw (567) to (568);
		\draw (567) to (593);
		\draw (568) to (569);
		\draw (568) to (594);
		\draw (569) to (570);
		\draw (569) to (595);
		\draw (570) to (571);
		\draw (570) to (596);
		\draw (571) to (597);
		\draw (572) to (573);
		\draw (572) to (598);
		\draw (573) to (574);
		\draw (573) to (599);
		\draw (574) to (575);
		\draw (574) to (600);
		\draw (575) to (576);
		\draw (575) to (601);
		\draw (576) to (577);
		\draw (576) to (602);
		\draw (577) to (578);
		\draw (577) to (603);
		\draw (578) to (579);
		\draw (578) to (604);
		\draw (579) to (580);
		\draw (579) to (605);
		\draw (580) to (581);
		\draw (580) to (606);
		\draw (581) to (582);
		\draw (581) to (607);
		\draw (582) to (583);
		\draw (582) to (608);
		\draw (583) to (584);
		\draw (583) to (609);
		\draw (584) to (585);
		\draw (584) to (610);
		\draw (585) to (586);
		\draw (585) to (611);
		\draw (586) to (587);
		\draw (586) to (612);
		\draw (587) to (588);
		\draw (587) to (613);
		\draw (588) to (589);
		\draw (588) to (614);
		\draw (589) to (590);
		\draw (589) to (615);
		\draw (590) to (591);
		\draw (590) to (616);
		\draw (591) to (592);
		\draw (591) to (617);
		\draw (592) to (593);
		\draw (592) to (618);
		\draw (593) to (594);
		\draw (593) to (619);
		\draw (594) to (595);
		\draw (594) to (620);
		\draw (595) to (596);
		\draw (595) to (621);
		\draw (596) to (597);
		\draw (596) to (622);
		\draw (597) to (623);
		\draw (598) to (599);
		\draw (598) to (624);
		\draw (599) to (600);
		\draw (599) to (625);
		\draw (600) to (601);
		\draw (600) to (626);
		\draw (601) to (602);
		\draw (601) to (627);
		\draw (602) to (603);
		\draw (602) to (628);
		\draw (603) to (604);
		\draw (603) to (629);
		\draw (604) to (605);
		\draw (604) to (630);
		\draw (605) to (606);
		\draw (605) to (631);
		\draw (606) to (607);
		\draw (606) to (632);
		\draw (607) to (608);
		\draw (607) to (633);
		\draw (608) to (609);
		\draw (608) to (634);
		\draw (609) to (610);
		\draw (609) to (635);
		\draw (610) to (611);
		\draw (610) to (636);
		\draw (611) to (612);
		\draw (611) to (637);
		\draw (612) to (613);
		\draw (612) to (638);
		\draw (613) to (614);
		\draw (613) to (639);
		\draw (614) to (615);
		\draw (614) to (640);
		\draw (615) to (616);
		\draw (615) to (641);
		\draw (616) to (617);
		\draw (616) to (642);
		\draw (617) to (618);
		\draw (617) to (643);
		\draw (618) to (619);
		\draw (618) to (644);
		\draw (619) to (620);
		\draw (619) to (645);
		\draw (620) to (621);
		\draw (620) to (646);
		\draw (621) to (622);
		\draw (621) to (647);
		\draw (622) to (623);
		\draw (622) to (648);
		\draw (623) to (649);
		\draw (624) to (625);
		\draw (624) to (650);
		\draw (625) to (626);
		\draw (625) to (651);
		\draw (626) to (627);
		\draw (626) to (652);
		\draw (627) to (628);
		\draw (627) to (653);
		\draw (628) to (629);
		\draw (628) to (654);
		\draw (629) to (630);
		\draw (629) to (655);
		\draw (630) to (631);
		\draw (630) to (656);
		\draw (631) to (632);
		\draw (631) to (657);
		\draw (632) to (633);
		\draw (632) to (658);
		\draw (633) to (634);
		\draw (633) to (659);
		\draw (634) to (635);
		\draw (634) to (660);
		\draw (635) to (636);
		\draw (635) to (661);
		\draw (636) to (637);
		\draw (636) to (662);
		\draw (637) to (638);
		\draw (637) to (663);
		\draw (638) to (639);
		\draw (638) to (664);
		\draw (639) to (640);
		\draw (639) to (665);
		\draw (640) to (641);
		\draw (640) to (666);
		\draw (641) to (642);
		\draw (641) to (667);
		\draw (642) to (643);
		\draw (642) to (668);
		\draw (643) to (644);
		\draw (643) to (669);
		\draw (644) to (645);
		\draw (644) to (670);
		\draw (645) to (646);
		\draw (645) to (671);
		\draw (646) to (647);
		\draw (646) to (672);
		\draw (647) to (648);
		\draw (647) to (673);
		\draw (648) to (649);
		\draw (648) to (674);
		\draw (649) to (675);
		\draw (650) to (651);
		\draw (651) to (652);
		\draw (652) to (653);
		\draw (653) to (654);
		\draw (654) to (655);
		\draw (655) to (656);
		\draw (656) to (657);
		\draw (657) to (658);
		\draw (658) to (659);
		\draw (659) to (660);
		\draw (660) to (661);
		\draw (661) to (662);
		\draw (662) to (663);
		\draw (663) to (664);
		\draw (664) to (665);
		\draw (665) to (666);
		\draw (666) to (667);
		\draw (667) to (668);
		\draw (668) to (669);
		\draw (669) to (670);
		\draw (670) to (671);
		\draw (671) to (672);
		\draw (672) to (673);
		\draw (673) to (674);
		\draw (674) to (675);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[A planar code with a grid of $2\times 2$ holes]{A planar code where we have removed a $2 \times 2$ grid of $2\times 2$ square holes.}
\label{fig:planarRemoveLbyLGridOfLbyL}
\end{figure}


\chapter{Hypermap-homology codes}\label{ch:hypermapHomologyCodes}

\section{Hypermaps}

A hypergraph can be thought of as a generalization of a graph, where edges can be connected to more than two vertices. A hypermap is an embedding of a hypergraph in a surface. We will give definitions below of topological hypermaps that follow this intuition and of combinatorial hypermaps that are described instead by a pair of permutations. We will explain that they really are the same object and show how to go back and forth between them. Our discussion of hypermaps follows \cite{cori1992maps} with some differences, particularly in our choice of graphical representation. Note that, following this source, we multiply permutations left to right. We will however write the action of $\sigma$ on $i$ as $\sigma(i)$ so that with our convention we have $(\alpha\sigma)(i)=\sigma(\alpha(i))$.

\begin{defn} A \textit{hypergraph}\index{hypergraph} with $n$ darts is a pair of partitions $V$ and $E$ of $B=\{1,\ldots,n\}$. We call the elements of $V$ \textit{vertices} and the elements of $E$ \textit{edges}. Noting that each \textit{dart} (element of $B$) is in one vertex and one edge, we say that it is \textit{incident} to that vertex and that edge. A hypergraph is \textit{connected} if whenever a union of elements of $V$ equals a union of elements of $E$ then this union is empty or the whole of $B$.
\end{defn}

For a graphical representation of a hypergraph we will use the bipartite graph representation (in the context of hypermaps this is usually called the Walsh representation, after \cite{walsh1975hypermaps}). Represent vertices as circles, edges as squares and darts as line segments between the edge and vertex they are incident to. We will label darts by their number, written counterclockwise of the dart with respect to edges.

For us hypergraphs and hypermaps will always be considered to be labeled (darts, vertices, edges and faces each have a label). We will usually not label vertices, edges and faces explicitly, instead labeling them by the set of labels of adjacent darts.

Notice that a hypergraph is connected if and only if its bipartite graph representation is connected (the definition for a hypergraph to be connected is equivalent to the bipartite graph having only one connected component).

\begin{defn}
A \textit{topological (oriented) hypermap}\index{hypermap!topological} is a 2-cell embedding of the bipartite graph representation of a connected hypergraph in a compact, connected, oriented surface.
\end{defn}

Now this surface has a genus $g$ and the bipartite graph embedding satisfies Euler's formula:
\[\text	{\# vertices}-\text{\# edges}+\text{\# faces}=2-2g.\]
Let $|F|$ be the number of faces of the embedding of the bipartite graph. Then noting that the bipartite graph has $|V|+|E|$ vertices, $n$ edges and $|F|$ faces we can derive an Euler formula for topological hypermaps:
\[|V|+|E|+|F|=n+2-2g.\]

\begin{defn}
A \textit{combinatorial (oriented) hypermap}\index{hypermap!combinatorial} is a pair $(\sigma,\alpha)$ with $\sigma,\alpha \in S_n$ such that $\langle\sigma,\alpha\rangle$ is transitive on $B$.
\end{defn}

We now describe the process to go back and forth between topological and combinatorial hypermaps. Given a topological hypermap, we define $\sigma$ and $\alpha$ by $\sigma(i)$ being the dart which is counterclockwise of dart $i$ with respect to the vertex incident to $i$ and $\alpha(i)$ being the dart which is clockwise of dart $i$ with respect to the edge incident to $i$. To show $\langle\sigma,\alpha\rangle$ is transitive we note that since the hypergraph in the definition of a topological hypermap is connected there is a path from one dart to any other which we can take by using $\sigma$ and $\alpha$.

Now note that the orbits of $\sigma$ are $V$ and the orbits of $\alpha$ are $E$. Also notice $\alpha^{-1}\sigma$ goes clockwise around the interior of a face: start at a dart whose label is inside the face, $\alpha^{-1}$ takes it counterclockwise around an edge, then $\sigma$ takes ${\alpha^{-1}}(i)$ clockwise around a vertex. Thus the orbits of $\alpha^{-1}\sigma$ are the faces of the topological hypermap.

\begin{table}[h!]
\centering
\begin{tabular}{ | c | c | c |  }
\hline
Permutation & Orbits are & Ordering \\
\hline
$\sigma$ & vertices & counterclockwise\\
$\alpha$ & edges & clockwise\\
$\alpha^{-1}\sigma$ & faces & clockwise\\
\hline
\multicolumn{3}{|c|}{Labels are counterclockwise of darts w.r.t. rotation about edges.}\\
\hline
\end{tabular}
\caption[Table of conventions for hypermaps]{Table of conventions for hypermaps.}
\label{tab:conventions}
\end{table}

To go from a combinatorial hypermap to a topological hypermap we form a polygon for each cycle of $\alpha^{-1}\sigma$. If the cycle is $(i_1,\dots,i_m)$ then place the labels $i_1$,\dots,$i_m$ inside the polygon on darts that go from vertex to edge as we travel clockwise. Outside the polygon place the label ${\alpha^{-1}}(i_j)$ on the dart counterclockwise of $i_j$ with respect to rotation about edges.

Notice each label in $B$ is on the inside of precisely one polygon (because $\alpha^{-1}\sigma$ is a partition of $B$) and on the outside of precisely one polygon (because $\alpha^{-1}$ is a permutation so takes the inside partition to a partition). So we can now specify a new topological space to be the polygons glued according to their labelings (i.e. the disjoint union of the polygons modulo identifying the corresponding edges).

\begin{prop}
The space so constructed is a compact connected oriented surface and the subspace given by the now-identified edges can be thought of as the bipartite graph representation of a connected hypergraph. This construction of a topological hypermap is an inverse process to the construction of combinatorial hypermaps given above.
\end{prop}
\begin{proof}
To see that the space is a surface (i.e. a 2-manifold) we check that each point has a neighborhood homeomorphic to $\R^2$. This is certainly true inside each polygon, it is true on darts since we are gluing exactly two darts together and it is true at vertices and edges because at each one we have a cyclic order of darts around it. The surface is compact because there is a finite number of polygons. The hypergraph (i.e. the 1-skeleton) is connected because $\langle \sigma,\alpha\rangle$ is transitive and this together with the interior of the polygons being connected gives us that the surface is connected. The surface is oriented because each polygon has the clockwise orientation and so when we glue together polygons at darts, those darts have opposite orientations. The second sentence follows by construction.
\end{proof}

\begin{ex}
Consider the square below to be a torus (identify boundary: top with bottom and left with right) then interpret it as the Walsh representation of a topological hypermap.

\begin{figure}[h!]
\centering
\begin{tikzpicture}
	\begin{pgfonlayer}{nodelayer}
		\node [style=edge, minimum size=6 mm] (0) at (0, 0) {$e_1$};
		\node [style=vertex, minimum size=6 mm] (1) at (-2, 0) {$v_2$};
		\node [style=edge, minimum size=6 mm] (2) at (-2, -2) {$e_2$};
		\node [style=none] (3) at (-2, 2) {};
		\node [style=none] (4) at (0, 2) {};
		\node [style=none] (5) at (2, 0) {};
		\node [style=none] (6) at (2, -2) {};
		\node [style=none] (7) at (2, 2) {};
		\node [style=none] (8) at (2, -4) {};
		\node [style=none] (9) at (0, -4) {};
		\node [style=none] (10) at (-2, -4) {};
		\node [style=none] (11) at (-4, -4) {};
		\node [style=none] (12) at (-4, -2) {};
		\node [style=none] (13) at (-4, 0) {};
		\node [style=none] (14) at (-4, 2) {};
		\node [style=vertex, minimum size=6 mm] (15) at (0, -2) {$v_1$};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (1) to node[left]{5} (2);
		\draw (0) to node[below]{4} (1);
		\draw (14.center) to (11.center);
		\draw (14.center) to (7.center);
		\draw (7.center) to (8.center);
		\draw (8.center) to (11.center);
		\draw (2) to node[right]{7} (10.center);
		\draw (0) to node[above]{2} (5.center);
		\draw (0) to node[left]{1} (4.center);
		\draw (3.center) to (1);
		\draw (1) to (13.center);
		\draw [in=0, out=180] (2) to node[below]{8} (12.center);
		\draw (2) to node[above]{6} (15);
		\draw (15) to (9.center);
		\draw (15) to node[right]{3} (0);
		\draw (15) to (6.center);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[First example of a hypermap]{A topological hypermap.}
\end{figure}


The combinatorial hypermap coming from it is $(\sigma,\alpha)$ with
\[\sigma=(1\ 8\ 3\ 6)(2\ 5\ 4\ 7), \qquad \alpha=(1\ 2\ 3\ 4)(5\ 6\ 7\ 8)\]
and from this we can calculate
\[\alpha^{-1}\sigma=(1\ 7)(2\ 8)(3\ 5)(4\ 6).\]

\end{ex}

\section{The dual hypermap}

The following definition can be found in \cite{cori1980complexity}.

\begin{defn}
The \textit{dual}\index{dual!hypermap} of a combinatorial hypermap $(\sigma,\alpha)$ is \[(\sigma',\alpha')=(\alpha^{-1}\sigma, \alpha^{-1}).\]
\end{defn}

We can see that $(\alpha')^{-1}\sigma'=(\alpha^{-1})^{-1}\alpha^{-1}\sigma=\sigma$ so duality switches vertices and faces while fixing edges (the orbits of $\alpha^{-1}$ are the same as the orbits of $\alpha$). Also $\sigma''=(\alpha')^{-1}\sigma'=\sigma$ and $\alpha''=(\alpha^{-1})^{-1}=\alpha$ so the dual of the dual is the original hypermap.

Our definition of the dual of a topological hypermap is similar to the one in \cite{mazoit2011tree}.

\begin{defn}
A \textit{dual} of a topological hypermap $H=(\Sigma,\Gamma)$ is a topological hypermap $H^*=(\Sigma_{\mathrm{op}},\Gamma^*)$ which we will now describe.
\begin{enumerate}
\item $\Sigma_{\mathrm{op}}$ is the surface $\Sigma$ with the opposite orientation.
\item The edges of $H^*$ are the edges of $H$.
\item There is precisely one vertex of $H^*$ for each face of $H$, inside that face. 
\item The darts of $H^*$ go from vertices of $H^*$ to edges around the corresponding face of $H$.
\item To label the darts of $H^*$ we draw the primal hypergraph in black and the dual hypergraph in red. Also draw a dotted line between red vertices and black vertices (this gives the \textit{canonical triangulation} of \cite{lando2004graphs}). Then each black label is inside one triangle: copy that label to the solid red line without leaving the triangle.
\end{enumerate}
\end{defn}

We will not discuss isomorphisms of combinatorial or topological hypermaps (see for example \cite{lando2004graphs}). But we do need a stronger notion of isomorphism of topological hypermaps that corresponds to equality of combinatorial hypermaps.

\begin{defn}
We say topological hypermaps $H=(\Sigma,\Gamma)$ and $H'=(\Sigma',\Gamma')$ are \textit{strongly isomorphic}, and write $H=H'$, if there exists an orientation-preserving homeomorphism $u\colon \Sigma \to \Sigma'$ with $u|_{\Gamma}$ giving an equality of hypergraphs.
\end{defn}

\begin{prop}
The dual of a topological hypermap is unique up to strong isomorphism and $(H^*)^*=H$.
\end{prop}
\begin{proof}
If $H^*=(\Sigma_{\mathrm{op}},\Gamma^*)$ and $H^*=(\Sigma_{\mathrm{op}},{\Gamma^*}')$ are both dual hypermaps of $H$ then we can see pictorially that there exists an orientation-preserving homeomorphism $u\colon \Sigma_{\mathrm{op}} \to \Sigma_{\mathrm{op}}$ with vertices and darts of $H^*$ taken to vertices and darts of ${H^*}'$. Since the labels are specified by the definition of a dual this is enough to give $H^*={H^*}'$.

Now we check that $H$ is a dual of $H^*$ and thus this uniqueness gives us $(H^*)^*=H$.
\end{proof}

\begin{prop}
The combinatorial hypermap corresponding to the topological dual of a hypermap is equal to the combinatorial dual of the hypermap.
\end{prop}
\begin{proof}
It is important to remember that the dual has the opposite orientation so all the conventions in Table \ref{tab:conventions} are reversed. Say we begin with a combinatorial hypermap $H=(\sigma,\alpha)$ which of course has combinatorial dual $H^*=(\alpha^{-1}\sigma,\alpha^{-1})$. Consider a cycle $(i_1,\dots,i_n)$ of $\alpha^{-1}\sigma$. This is a face of $H$ and so gives us a vertex of the topological dual with the darts $i_1,\dots,i_n$ clockwise around it. Our usual convention is to take vertices counterclockwise but on the dual graph we go clockwise so the vertices of $H^*$ give us exactly the permutation $\alpha^{-1}\sigma$. Similarly, cycles of $\alpha$ are edges of $H$ counterclockwise and if we take them in $H^*$ clockwise then we get the permutation $\alpha^{-1}$ as desired.
\end{proof}

\begin{ex}\label{ex:squareOctagon}

\begin{figure}[p]
\centering
\begin{tikzpicture}
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (-5, 5) {};
		\node [style=vertex] (1) at (-7, 1) {};
		\node [style=vertex] (2) at (-3, 1) {};
		\node [style=vertex] (3) at (-5, -3) {};
		\node [style=edge] (4) at (-5, 3) {};
		\node [style=edge] (5) at (-5, -1) {};
		\node [style=edge] (6) at (-1, 1) {};
		\node [style=edge] (7) at (1, 5) {};
		\node [style=edge] (8) at (1, -3) {};
		\node [style=edge] (9) at (-7, -5) {};
		\node [style=edge] (10) at (-3, -5) {};
		\node [style=vertex] (11) at (1, 3) {};
		\node [style=vertex] (12) at (1, -1) {};
		\node [style=vertex] (13) at (-1, -5) {};
		\node [style=vertex] (14) at (3, -5) {};
		\node [style=edge] (15) at (3, 1) {};
		\node [style=none] (16) at (-6, 6) {};
		\node [style=none] (17) at (-4, 6) {};
		\node [style=none] (18) at (0, 6) {};
		\node [style=none] (19) at (2, 6) {};
		\node [style=none] (20) at (4, 1) {};
		\node [style=none] (21) at (-8, 6) {};
		\node [style=none] (22) at (4, 6) {};
		\node [style=none] (23) at (4, -5) {};
		\node [style=none] (24) at (4, -6) {};
		\node [style=none] (25) at (2, -6) {};
		\node [style=none] (26) at (0, -6) {};
		\node [style=none] (27) at (-4, -6) {};
		\node [style=none] (28) at (-6, -6) {};
		\node [style=none] (29) at (-8, -6) {};
		\node [style=none] (30) at (-8, -5) {};
		\node [style=none] (31) at (-8, 1) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (21.center) to (22.center);
		\draw (22.center) to (24.center);
		\draw (24.center) to (29.center);
		\draw (21.center) to (29.center);
		\draw (0) to (16.center);
		\draw (0) to (17.center);
		\draw (7) to node[below left]{4} (18.center);
		\draw (7) to node[above left]{5} (19.center);
		\draw (7) to node[right]{6} (11);
		\draw (11) to node[above left]{7} (6);
		\draw (6) to node[below]{9} (2);
		\draw (2) to node[above right]{2} (4);
		\draw (4) to node[left]{1} (0);
		\draw (1) to (31.center);
		\draw (1) to node[below left]{13} (5);
		\draw (5) to node[right]{15} (3);
		\draw [in=45, out=-135] (3) to node[above left]{19} (9);
		\draw [in=0, out=180] (9) to node[below]{21} (30.center);
		\draw [in=135, out=-45] (9) to node[above right]{20} (28.center);
		\draw [in=-45, out=135] (10) to node[below left]{22} (3);
		\draw [in=45, out=-135] (10) to node[below right]{24} (27.center);
		\draw (10) to node[above]{23} (13);
		\draw (13) to (26.center);
		\draw [in=-135, out=45] (13) to node[below right]{18} (8);
		\draw [in=-135, out=45] (5) to node[above left]{14} (2);
		\draw [in=135, out=-45] (6) to node[above right]{8} (12);
		\draw [in=90, out=-90] (12) to node[left]{16} (8);
		\draw (12) to node[below right]{12} (15);
		\draw (15) to node[below left]{10} (11);
		\draw [in=180, out=0] (15) to node[above]{11} (20.center);
		\draw (8) to node[above right]{17} (14);
		\draw (14) to (25.center);
		\draw (14) to (23.center);
		\draw (1) to node[below right]{3} (4);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[Octagon-square hypermap]{A hypermap with four square and four octagon faces.}
\label{fig:squareOctagon}
\end{figure}


If we start with a hypergraph embedded on a torus as pictured in Figure \ref{fig:squareOctagon} then we have a hypermap with
\begin{align*}
&\sigma=(1\ 24\ 20)(2\ 14\ 9)(3\ 11\ 13)(4\ 18\ 23)(5\ 21\ 17)(6\ 7\ 10)(8\ 16\ 12)(15\ 19\ 22),\\
&\alpha=(1\ 2\ 3)(4\ 5\ 6)(7\ 8\ 9)(10\ 11\ 12)(13\ 14\ 15)(16\ 17\ 18)(19\ 20\ 21)(22\ 23\ 24),\text{ and}\\
&\alpha^{-1}\sigma=(1\ 11\ 6\ 21)(2\ 24\ 4\ 7)(3\ 14)(5\ 18)(8\ 10)(9\ 16\ 23\ 15)(12\ 13\ 19\ 17)(20\ 22).
\end{align*}
Then, using $(\sigma',\alpha')=(\alpha^{-1}\sigma, \alpha^{-1})$, we see the combinatorial dual has 
\begin{align*}
&\sigma'=(1\ 11\ 6\ 21)(2\ 24\ 4\ 7)(3\ 14)(5\ 18)(8\ 10)(9\ 16\ 23\ 15)(12\ 13\ 19\ 17)(20\ 22)\\
&\alpha'=(1\ 3\ 2)(4\ 6\ 5)(7\ 9\ 8)(10\ 12\ 11)(13\ 15\ 14)(16\ 18\ 17)(19\ 21\ 20)(22\ 24\ 23),\text{ and}\\
&(\alpha')^{-1}\sigma'=(1\ 24\ 20)(2\ 14\ 9)(3\ 11\ 13)(4\ 18\ 23)(5\ 21\ 17)(6\ 7\ 10)(8\ 16\ 12)(15\ 19\ 22).
\end{align*}
In particular $(\alpha')^{-1}\sigma'=\sigma$. Notice that this is the same as the topological dual in Figure \ref{fig:squareOctagonDual} as long as we orient the surface in the opposite way i.e. cycle around vertices clockwise, edges counterclockwise and faces counterclockwise.


\begin{figure}[p]
\centering
%\includegraphics{dualOfOctagonSquare.pdf}
\begin{tikzpicture}
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (-5, 5) {};
		\node [style=vertex] (1) at (-7, 1) {};
		\node [style=vertex] (2) at (-3, 1) {};
		\node [style=vertex] (3) at (-5, -3) {};
		\node [style=edge] (4) at (-5, 3) {};
		\node [style=edge] (5) at (-5, -1) {};
		\node [style=edge] (6) at (-1, 1) {};
		\node [style=edge] (7) at (1, 5) {};
		\node [style=edge] (8) at (1, -3) {};
		\node [style=edge] (9) at (-7, -5) {};
		\node [style=edge] (10) at (-3, -5) {};
		\node [style=vertex] (11) at (1, 3) {};
		\node [style=vertex] (12) at (1, -1) {};
		\node [style=vertex] (13) at (-1, -5) {};
		\node [style=vertex] (14) at (3, -5) {};
		\node [style=edge] (15) at (3, 1) {};
		\node [style=none] (16) at (-6, 6) {};
		\node [style=none] (17) at (-4, 6) {};
		\node [style=none] (18) at (0, 6) {};
		\node [style=none] (19) at (2, 6) {};
		\node [style=none] (20) at (4, 1) {};
		\node [style=none] (21) at (-8, 6) {};
		\node [style=none] (22) at (4, 6) {};
		\node [style=none] (23) at (4, -5) {};
		\node [style=none] (24) at (4, -6) {};
		\node [style=none] (25) at (2, -6) {};
		\node [style=none] (26) at (0, -6) {};
		\node [style=none] (27) at (-4, -6) {};
		\node [style=none] (28) at (-6, -6) {};
		\node [style=none] (29) at (-8, -6) {};
		\node [style=none] (30) at (-8, -5) {};
		\node [style=none] (31) at (-8, 1) {};
		\node [style=dualVertex] (32) at (1, 1) {};
		\node [style=dualVertex] (33) at (-2, 4) {};
		\node [style=dualVertex] (34) at (-5, 1) {};
		\node [style=dualVertex] (35) at (-2, -2) {};
		\node [style=dualVertex] (36) at (4, -2) {};
		\node [style=dualVertex] (37) at (-8, -2) {};
		\node [style=dualVertex] (38) at (4, 4) {};
		\node [style=dualVertex] (39) at (-8, 4) {};
		\node [style=dualVertex] (40) at (-5, -5) {};
		\node [style=dualVertex] (41) at (1, -5) {};
		\node [style=none] (42) at (1, -6) {};
		\node [style=none] (43) at (1, -6) {};
		\node [style=none] (44) at (1, 6) {};
		\node [style=none] (45) at (-5, 6) {};
		\node [style=none] (46) at (-5, -6) {};
		\node [style=none] (47) at (-2.75, 6) {};
		\node [style=none] (48) at (-2.75, 6) {};
		\node [style=none] (49) at (-2.75, -6) {};
		\node [style=none] (50) at (-7.25, 6) {};
		\node [style=none] (51) at (-7.25, 6) {};
		\node [style=none] (52) at (-7.25, -6) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (21.center) to (22.center);
		\draw (22.center) to (24.center);
		\draw (24.center) to (29.center);
		\draw (21.center) to (29.center);
		\draw (0) to (16.center);
		\draw (0) to (17.center);
		\draw (7) to node[left]{4} (18.center);
		\draw (7) to node[left]{5} (19.center);
		\draw (7) to node[right]{6} (11);
		\draw (11) to node[left]{7} (6);
		\draw (6) to node[below]{9} (2);
		\draw (2) to node[right]{2} (4);
		\draw (4) to node[left]{1} (0);
		\draw (4) to node[below]{3} (1);
		\draw (1) to (31.center);
		\draw (1) to node[left]{13} (5);
		\draw (5) to node[right]{15} (3);
		\draw [in=45, out=-135] (3) to node[left]{19} (9);
		\draw [in=0, out=180] (9) to node[below]{21} (30.center);
		\draw [in=135, out=-45] (9) to node[right]{20} (28.center);
		\draw (10) to node[left]{22} (3);
		\draw [in=45, out=-135] (10) to node[right]{24} (27.center);
		\draw (10) to node[above]{23} (13);
		\draw (13) to (26.center);
		\draw [in=-135, out=45] (13) to node[below]{18} (8);
		\draw [in=-135, out=45] (5) to node[above]{14} (2);
		\draw (6) to node[right]{8} (12);
		\draw [in=90, out=-90] (12) to node[left]{16} (8);
		\draw (12) to node[right]{12} (15);
		\draw (15) to node[left]{10} (11);
		\draw [in=180, out=0] (15) to node[above]{11} (20.center);
		\draw [in=135, out=-45] (8) to node[right]{17} (14);
		\draw (14) to (25.center);
		\draw (14) to (23.center);
		\draw [color=red] (41) to node[left]{18} (8);
		\draw [color=red, in=90, out=-90] (41) to node[right]{5} (42.center);
		\draw [color=red] (32) to node[below]{8} (6);
		\draw [color=red] (32) to node[above]{10} (15);
		\draw [color=red] (7) to (44.center);
		\draw [color=red] (33) to node[below]{2} (4);
		\draw [color=red] (33) to node[above]{4} (7);
		\draw [color=red] (33) to node[right]{7} (6);
		\draw [color=red] (35) to node[below]{15} (5);
		\draw [color=red] (35) to node[right]{23} (10);
		\draw [color=red] (35) to node[above]{16} (8);
		\draw [color=red] (35) to node[left]{9} (6);
		\draw [color=red] (34) to node[left]{3} (4);
		\draw [color=red] (34) to node[right]{14} (5);
		\draw [color=red] (39) to node[above]{1} (4);
		\draw [color=red] (38) to node[right]{11} (15);
		\draw [color=red] (38) to node[below]{6} (7);
		\draw [color=red] (5) to node[above]{13} (37);
		\draw [color=red] (37) to node[right]{19} (9);
		\draw [color=red, in=-72, out=108] (36) to node[left]{12} (15);
		\draw [color=red] (36) to node[below]{17} (8);
		\draw [color=red] (40) to node[below]{20} (9);
		\draw [color=red] (40) to node[above]{22} (10);
		\draw [color=red] (33) to node[left]{24} (47.center);
		\draw [color=red] (49.center) to (10);
		\draw [color=red] (39) to node[left, pos=0.7]{21} (50.center);
		\draw [color=red] (52.center) to (9);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[Octagon-square hypermap with dual]{The octagon-square hypermap with its dual drawn in red.}
\label{fig:squareOctagonDual}
\end{figure}

\end{ex}

%\clearpage

\section{Hypermap homology}\label{sec:hypermapHomology}
Our theory of homology of hypermaps\index{homology!hypermap} comes from \cite{cori1992maps}. Our main difference is that we are working over $\F_2$-vector spaces instead of over $\Z$-modules.

Let $\mathcal{V}, \mathcal{E}, \mathcal{F}, \mathcal{W}$ be $\F_2$-vector spaces with bases $V, E,F,W$ respectively where $W=\{w_1,\ldots,w_n\}$ . Define $d_2 \colon \mathcal{F}\to\mathcal{W}$ by $d_2(f)=\sum_{i\in f} w_i$ extended linearly and $d_1\colon \mathcal{W} \to \mathcal{V}$ by $d_1(w_i)=v_{\ni i}+v_{\ni \alpha^{-1}(i)}$. Here we use the notation $v_{\ni i}$ for the element of $V$ containing $i$ (there exists a unique such vertex because $V$ is a partition of $B$).

Also define $\imath \colon \mathcal{E} \to \mathcal{W}$ by $\imath(e)=\sum_{i\in e}w_i$ extended linearly. Notice $\imath$ is an injection ($d_2$ is also), and then define a projection map $p \colon \mathcal{W} \to \mathcal{W}/\imath(\mathcal{E})$.

\begin{prop}
We have $d_1\circ d_2=0$ and $d_1\circ \imath=0$.
\end{prop}
\begin{proof}
We have $(d_1\circ d_2)(f)=d_1(\sum_{i\in f} w_i)=\sum_{i\in f}v_{\ni i}+\sum_{i\in f}v_{\ni \alpha^{-1}(i)}$. Now both of these sums are the vertices around the face $f$ so extending linearly $d_1\circ d_2=0$. Similarly $(d_1\circ\imath)(e)=d_1(\sum_{i\in e} w_i)=\sum_{i\in e}v_{\ni i}+\sum_{i\in e}v_{\ni \alpha^{-1}(i)}$ and both of these sums are the vertices adjacent to $e$.
\end{proof}

From this we can define $\partial_1\colon \mathcal{W}/\imath(\mathcal{E}) \to \mathcal{V}$ by $\partial_1(w+\imath(\mathcal{E}))=d_1(w)$ and $\partial_2=p\circ d_2$. Then we have the commutative diagram below.
\[\begin{tikzcd}[ampersand replacement=\&]
               \& \mathcal{F} \arrow{r}{d_2} \arrow{dr}{\partial_2} \& \mathcal{W} \arrow{r}{d_1}\arrow{d}{p} \& \mathcal{V} \\
               \& \& \mathcal{W}/\imath(\mathcal{E})\arrow{ur}{\partial_1} \&
\end{tikzcd}\]
From this we see $\partial_1 \circ \partial_2 = d_1\circ d_2=0$. So we have a chain complex
\[\mathcal{F} \stackrel{\partial_2}{\to} \mathcal{W}/\imath(\mathcal{E}) \stackrel{\partial_1}{\to} \mathcal{V}\]
\[V_S=\cap_{s \in S} V_{\{s\}}.\]

First we see that if $\mathcal{V}$ has basis $v_1,\dots,v_{|V|}$ then $\im\partial_1$ has basis $v_1-v_j$ for $j=2,\dots,|V|$. This set is linearly independent because the $v_j$ are a basis of $\mathcal{V}$ and it spans $\im\partial_1$ because $\partial_1(w_i)=v_{\ni i}+v_{\ni \alpha^{-1}(i)}=(v_1+v_{\ni \alpha^{-1}(i)})+(v_1+v_{\ni i})$. Thus $\dim(\im\partial_1)=|V|-1$ and $\dim H_0=1$.

Next $\ker\partial_2=\{f \in \mathcal{F} \colon d_2(f)\in \imath(\mathcal{E})\}$ which has the same dimension as $d_2(\mathcal{F}) \cap \imath(\mathcal{E})$ because $d_2$ is injective. But an element in this intersection corresponds to both a union of cycles of $\alpha^{-1}\sigma$ and a union of cycles of $\alpha$. But such a union must be empty or the whole of $B$ and so $\dim H_2=\dim(\ker\partial_2)=1$.

From this we have $\dim(\im\partial_2)=\dim\mathcal{F}-\dim(\ker\partial_2)=|F|-1$ and $\dim(\ker\partial_1)=\dim(\mathcal{W}/\imath(\mathcal{E}))-\dim(\im\partial_1)=|W|-|E|-(|V|-1)=n-|V|-|E|+1$. So then $\dim H_1=\dim(\ker\partial_1)-\dim(\im\partial_2)=(n-|V|-|E|+1)-(|F|-1)=n+2-|V|-|E|-|F|=2g$.

The following well known lemma allows us to create a homomorphism of homology groups induced from a homomorphism of chains.

\begin{lem}\label{lem:inducedHomomorphism}
If we have a commutative diagram of vector spaces and vector space homomorphisms (i.e. linear functions)
\[\begin{tikzcd}[ampersand replacement=\&]
\& A_2 \arrow{r}{f_2} \arrow{d}{\psi_2} \& A_1 \arrow{r}{f_1}\arrow{d}{\psi_1} \& A_0 \arrow{d}{\psi_0}\\
\&B_2 \arrow{r}{g_2} \& B_1 \arrow{r}{g_1} \& B_0 
\end{tikzcd}\]
with $f_1\circ f_2=0$ and $g_1\circ g_2=0$ then $\psi_1(\im f_2) \subseteq \im g_2$, $\psi_1(\ker f_1)\subseteq \ker g_1$ which gives us a homomorphism\index{induced homomorphism}
\[(\psi_1)_* \colon \frac{\ker f_1}{\im f_2} \to \frac{\ker g_1}{\im g_2}.\]
\end{lem}
\begin{proof}
An element of $\psi_1(\im f_2)$ is of the form $\psi_1(f_2(a_2))=g_2(\psi_2(a_2))\in \im g_2$. Next an element of $\psi_1(\ker f_1)$ is of the form $\psi_1(a_1)$ with $f_1(a_1)=0$. But then $g_1(\psi_1(a_1))=\psi_0(f_1(a_1))=\psi_0(0)=0$ so $\psi_1(a_1) \in \ker g_1$.

Then we can define $(\psi_1)_*(a_1+\im f_2)=\psi_1(a_1)+\im g_2$ and the facts above give us that this function is well defined and has an allowable codomain. Linearity follows from the linearity of $\psi_1$.
\end{proof}

The next lemma gives us a condition on the above diagram that lead to an isomorphism of homology.

\begin{lem}\label{lem:inducedIsomorphism}
If we have the setup in Lemma \ref{lem:inducedHomomorphism} and furthermore we have \[\psi_1(\im f_2) = \im g_2,\] \[\psi_1(\ker f_1)= \ker g_1, \mbox{ and}\] \[\ker\psi_1 \cap \ker f_1 \subseteq \im f_2\] then $(\psi_1)_*$ is an isomorphism.
\end{lem}
\begin{proof}
We have $(\psi_1)_*$ a surjection because $\psi_1$ is a surjection from $\ker f_1$ to $\ker g_1$. To see $(\psi_1)_*$ is injective, if $(\psi_1)_*(a_1+\im f_2)=0$ for $a_1\in \ker f_1$ then $\psi_1(a_1)\in \im g_2=\psi_1(\im f_2)$ so $\psi_1(a_1)=\psi_1(f_2(a_2))$ and thus $\psi_1(a_1-f_2(a_2))=0$ and also $f_1(a_1-f_2(a_2))=0$ so $a_1-f_2(a_2) \in \ker\psi_1\cap \ker f_1 \subseteq \im f_2$ so $a_1-f_2(a_2)=f_2(a_2')$ so $a_1=f_2(a_2+a_2')\in \im f_2$ as required.
\end{proof}

The following proposition gives us another way of looking at hypermap-homology which may be informative.

\begin{prop}\label{prop:H1asDarts}
\[H_1 = \frac{\ker\partial_1}{\im\partial_2} \cong \frac{\ker d_1}{\im d_2+\imath(\mathscr{E})}.\] 
\end{prop}
\begin{proof}
Consider the following diagram.
\[\begin{tikzcd}[ampersand replacement=\&]
\& \mathcal{F}\oplus\mathcal{E} \arrow{r}{d_2\oplus \imath} \arrow{d}{\pi_\mathcal{F}} \& \mathcal{W} \arrow{r}{d_1}\arrow{d}{p} \& \mathcal{V}\arrow{d}{id}\\
\&\mathcal{F} \arrow{r}{\partial_2} \& \mathcal{W}/\imath(\mathcal{E}) \arrow{r}{\partial_1} \& \mathcal{V}
\end{tikzcd}\]
This diagram is commutative because $p((d_2\oplus \imath)(f+e)=p(d_2(f))=\partial_2(f)=\partial_2(\pi_\mathcal{F}(f+e))$ and $\partial_1(p(w))=d_1(w)$. Next note that \[\im \partial_2=\im(p\circ d_2)=p(\im d_2)=p(\im d_2\oplus \imath)\] and using the fact that $p$ is surjective, \[\ker \partial_1=\{p(w) \colon \partial_1(p(w))=0\}=\{p(w) \colon d_1(w)=0\}=p(\ker d_1).\]

Finally, $\ker p=\imath(\mathcal{E}) \subseteq \im(d_2\oplus \imath)$ so by Lemma \ref{lem:inducedIsomorphism} we have $p_*$ an isomorphism.
\end{proof}


%\begin{proof}
%First, we show that $\ker\partial_1 \cong \ker d_1/\imath(\mathscr{E})$. To see this, consider the map $p|_{\ker d_1} \colon \ker d_1 \to \mathscr{W}/\imath(\mathscr{E})$. We see $\ker(p|_{\ker d_1})=\ker d_1 \cap \ker p= \imath(\mathscr{E})$ because $d_1 \circ \imath = 0$. Also, $\im(p|_{\ker d_1})=\{w+\imath(\mathscr{E}) \colon d_1(w)=0\}=\ker\partial_1$. Thus by the first isomorphism theorem we have $\ker d_1/\imath(\mathscr{E}) \cong \ker\partial_1$.
%
%Next we show that $\im\partial_2 \cong \im d_2/(\im d_2\cap\imath(\mathscr{E})$. Consider $p|_{\im d_2} \colon \im d_2 \to \mathscr{W}/\imath(\mathscr{E})$. Now $\ker(p|_{\im d_2})=\im(d_2) \cap \imath(\mathscr{E})$ and $\im(p|_{\im d_2})=\im(p\circ d_2)=\im(\partial_2)$ from which the desired isomorphism follows.
%
%Then
%\begin{align*}
%\frac{\ker\partial_1}{\im\partial_2} & \cong \frac{\ker d_1/\imath(\mathscr{E})}{\im d_2/(\im d_2\cap\imath(\mathscr{E}))}\\
%& \cong \frac{\ker d_1/\imath(\mathscr{E})}{(\im d_2+\imath(\mathscr{E}))/\imath(\mathscr{E})}\\
%& \cong \frac{\ker d_1}{\im d_2+\imath(\mathscr{E})}
%\end{align*}
%where we have used the second and third isomorphism theorems in the second and third isomorphisms.
%\end{proof}

Next we consider how to relate hypermap-homology to the homology we can get by considering the embedded bipartite graph representation of the hypermap. The chain complex of this `classical homology'\index{homology!bipartite graph representation} is
\[\mathcal{F} \stackrel{\overline{d}_2}{\to} \mathcal{W} \stackrel{\overline{d}_1}{\to} \mathcal{V}\oplus\mathcal{E}\]
where $\overline{d}_2$ and $\overline{d}_1$ are defined by $\overline{d}_2(f) = \sum_{i\in f} w_i+w_{\alpha^{-1}(i)}$ and $\overline{d}_1(w_i)=v_{\ni i}+e_{\ni i}$ extended linearly.

\begin{prop}\label{prop:H1asClassical}
\[H_1 = \frac{\ker\partial_1}{\im\partial_2} \cong \frac{\ker \overline{d}_1}{\im \overline{d}_2}.\] 
\end{prop}
\begin{proof}
Consider the following diagram
\[\begin{tikzcd}[ampersand replacement=\&]
\& \mathcal{F} \arrow{r}{\partial_2} \arrow{d}{id} \& \mathcal{W}/\imath(\mathcal{E}) \arrow{r}{\partial_1}\arrow{d}{\mu} \& \mathcal{V}\arrow{d}{i_{\mathcal{V}}}\\
\&\mathcal{F} \arrow{r}{\overline{d}_2} \& \mathcal{W} \arrow{r}{\overline{d}_1} \& \mathcal{V}\oplus\mathcal{E}
\end{tikzcd}\]
where $\mu(w_i+\imath(\mathcal{E}))=w_i+w_{\alpha^{-1}(i)}$. This is well defined because \[\mu(\imath(e))=\sum_{i\in e}w_i+\sum_{i\in e}w_{\alpha^{-1}(i)}=0.\] The diagram is commutative because \[\mu(\partial_2(f))=\mu\left(\sum_{i\in f} w_i\right)=\sum_{i\in f} w_i+w_{\alpha^{-1}(i)}=\overline{d}_2(f)\] and 
\begin{align*}
\overline{d}_1(\mu(w_i+\imath(\mathcal{E})))&=\overline{d}_1(w_i+w_{\alpha^{-1}(i)})\\
&=v_{\ni i}+e_{\ni i}+v_{\ni\alpha^{-1}(i)}+e_{\ni \alpha^{-1}(i)}\\
&=v_{\ni i}+v_{\ni\alpha^{-1}(i)}\\
&=\partial_1(w_i+\imath(\mathcal{E}).
\end{align*}

We have $\im \overline{d}_2=\im(\mu\circ \partial_2)=\mu(\im\partial_2)$ and the earlier lemma gives us $\mu(\ker \partial_1)\subseteq \ker \overline{d}_1$. We now aim to prove the other inclusion.

If $x\in \ker\overline{d}_1$ then at each edge (i.e. square vertex of the bipartite graph representation) of the hypermap there are an even number of adjacent darts of $x$. Choose an ordering $w_{i_0},w_{i_1},\dots,w_{i_{2m-1}}$ of the darts at each edge so that there are no other darts in $x$ as we go counterclockwise from $w_{i_{2k}}$ to $w_{i_{2k+1}}$. Then if the darts in between $w_{i_{2k}}$ and $w_{i_{2k+1}}$ are $w_{l_1},\ldots,w_{l_a}$ we have $\mu(w_i+w_{l_1}+\dots+w_{l_a}+\imath(\mathcal{E}))=w_i+w_j$. Now by linearity, since all darts in $x$ are adjacent to one edge of the hypermap, this gives us a recipe to write $x=\mu(w+\imath(\mathcal{E}))$ for some $w\in \mathcal{W}$.

Finally, note that if $w=\sum_{i\in I} w_i$ for some index set $I$ then $\mu(w+\imath(\mathcal{E}))=\mu(\sum_{i\in I} w_i+\imath(\mathcal{E}))=\sum_{i\in I} (w_i + w_{\alpha^{-1}(i)})$. Thus if $\mu(w+\imath(\mathcal{E}))=0$ then $w$ is fixed by $\alpha^{-1}$ and must be in $\imath(\mathcal{E})$ so in fact $\mu$ is injective. Thus Lemma \ref{lem:inducedIsomorphism} shows that $\mu_*$ is an isomorphism.
\end{proof}


%Now notice $\ker\phi$ is made up of sums of darts fixed by $\alpha$ so $\ker\phi=\imath(\mathscr{E})$. Also
%\[\overline{d}_1(\phi(w_i))=\overline{d}_1(w_{i}+w_{\alpha^{-1}(i)})=v_{\ni i}+e_{\ni i}+v_{\ni \alpha^{-1}(i)}+e_{\ni \alpha^{-1}(i)}=v_{\ni i}+v_{\ni \alpha^{-1}(i)}=d_1(w_i)\]
%so $\pi\circ\overline{d}_1\circ\phi=d_1$ where $\pi$ is the projection $\pi \colon \mathcal{V}\oplus\mathcal{E}\to\mathcal{V}$. Thus we have the commutative diagram below.
%
%\[\begin{tikzcd}
%	& & \mathcal{W} \arrow{r}{\overline{d}_1} & \mathcal{V}\oplus\mathcal{E} \arrow{d}{\pi} \\
%	& \mathcal{F} \arrow{r}{d_2} \arrow{dr}{\partial_2} \arrow{ur}{\overline{d}_2} & \mathcal{W} \arrow{r}{d_1}\arrow{d}{p} \arrow{u}{\phi} & \mathcal{V} \\
%	& & \mathcal{W}/\imath(\mathcal{E})\arrow{ur}{\partial_1} &
%\end{tikzcd}\]
%
%Now recall that $\ker\phi=\imath(\mathscr{E})$ and from this we can notice that $\im\phi\cong\mathcal{W}/\imath(\mathcal{E})$. So we write a slightly different commutative diagram.
%
%\[\begin{tikzcd}
%	& & \phi(\mathcal{W}) \arrow{dr}{\pi\circ\overline{d}_1|_{\phi(\mathcal{W})}} & \\
%	& \mathcal{F} \arrow{r}{d_2} \arrow{dr}{\partial_2} \arrow{ur}{\overline{d}_2} & \mathcal{W} \arrow{r}{d_1}\arrow{d}{p} \arrow{u}{\phi} & \mathcal{V} \\
%	& & \mathcal{W}/\imath(\mathcal{E})\arrow{ur}{\partial_1} &
%\end{tikzcd}\]
%
%Here we have used the fact that $\im\overline{d}_2 \subseteq \phi(\mathcal{W})$ because $\overline{d}_2=\phi\circ d_2$.
%
%Now since $\ker\phi=\ker p$ we can use exactly the same proof as in the proof of Proposition \ref{prop:H1asDarts} to show that
%\[\frac{\ker\left(\pi\circ\overline{d}_1|_{\phi(\mathcal{W})}\right)}{\im \overline{d}_2} \cong \frac{\ker d_1}{\im d_2+\imath(\mathscr{E})}.\]
%Then we conclude that
%\[H_1 = \frac{\ker\partial_1}{\im\partial_2} \cong \frac{\ker d_1}{\im d_2+\imath(\mathscr{E})} \cong \frac{\ker\left(\pi\circ\overline{d}_1|_{\phi(\mathcal{W})}\right)}{\im \overline{d}_2}=\frac{\ker\overline{d}_1 \cap \phi(\mathcal{W})}{\im \overline{d}_2}.\]

This gives us three ways to think about $H_1$:
\begin{enumerate}
\item $\partial_1$-cycles in $\mathcal{W}/\imath(\mathcal{E})$ modulo $\partial_2$-boundaries,
\item $d_1$-cycles in $\mathcal{W}$ modulo $d_2$-boundaries and $\imath$-boundaries, or
\item $\overline{d}_1$-cycles in $\mathcal{W}$ modulo $\overline{d}_2$-boundaries.
\end{enumerate}

\section{Hypermap-homology codes}\label{sec:hypHomCodes}

Choose a basis for $\mathcal{W}/\imath(\mathcal{E})$ (the bases for $\mathcal{F}$ and $\mathcal{V}$ have already been fixed).

Let $H_X=[\partial_1]$ and $H_Z^T=[\partial_2]$. Then we have $H_XH_Z^T=[\partial_1\circ\partial_2]=[0]=0$ so we can create a CSS code from $H_X$ and $H_Z$. Now $H_X$ is a $|V|\times(|W|-|E|)$ matrix and $H_Z$ is a $|F|\times(|W|-|E|)$ matrix. By the theory of CSS codes this code has parameters $[|W|-|E|,2g,D]$ with
\[D=\min\{\wt(c) \colon c \in (C_X \setminus C_Z^\perp) \cup (C_Z \setminus C_X^\perp)\}\]
where $C_X=\ker(H_X)$, $C_X^\perp=\im(H_X^T)$, $C_Z=\ker(H_Z)$ and $C_Z^\perp=\im(H_Z^T)$.

\begin{ex}
In this example we create a hypermap-homology code from example \ref{ex:squareOctagon}. Since $\mathcal{W}/\imath(\mathcal{E})=\langle w_1,w_2,w_3,\dots,w_{24} \mid w_1+w_2+w_3,\dots,w_{22}+w_{23}+w_{24}\rangle$ we may take as a basis $w_1,w_2,w_4,w_5,\dots,w_{23}$. Choosing this basis we can calculate
\[H_X=\begin{bmatrix}
1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 \\
0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\
1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 1 \\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 1 & 1 & 1 & 1
\end{bmatrix}\]
and
\[H_Z=\begin{bmatrix}
1 & 0 & 1 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 \\
0 & 1 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\
1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & 0 & 0 & 1 \\
0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & 1 & 1 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0
\end{bmatrix}.\]

In both matrices the columns are labelled by $w_1,w_2,w_4,w_5,w_7,w_8,\dots,w_{23}$. In $H_X$ the rows are labelled by vertices $v_1,\dots,v_8$ while in $H_Z$ the rows are labelled by faces $f_1,\dots,f_8$. We give a few examples of how to compute these matrices:
\[\partial_1(w_{10})=v_{\ni 10} + v_{\ni 12}=v_6+v_7\]
\[\partial_2(f_1)=w_1+w_{11}+w_6+w_{21}=w_1+w_4+w_5+w_{11}+w_{19}+w_{20}.\]

By computer search (see Section \ref{sec:OOsoftware}) we calculate $D=2$ so this is a $[16,2,2]$ code.

\end{ex}

\begin{ex}
The hypermap in Figure \ref{fig:hexagon} has 48 darts, 16 vertices, 16 edges and 16 faces. We choose a basis for $\mathcal{W}/\imath(\mathcal{E})$ corresponding to all the darts except the ones to the bottom right of each edge. Computer search shows that the minimum distance is 3 and thus this is a $[32,2,3]$ code.

\begin{figure}[p!]
\centering
\begin{tikzpicture}
	\begin{pgfonlayer}{nodelayer}
		\node [style=edge] (0) at (-7, 6) {};
		\node [style=edge] (1) at (-5, 6) {};
		\node [style=edge] (2) at (-3, 6) {};
		\node [style=edge] (3) at (-1, 6) {};
		\node [style=vertex] (4) at (-8, 5.5) {};
		\node [style=vertex] (5) at (-6, 5.5) {};
		\node [style=vertex] (6) at (-4, 5.5) {};
		\node [style=vertex] (7) at (-2, 5.5) {};
		\node [style=vertex] (8) at (0, 5.5) {};
		\node [style=edge] (9) at (-8, 4.5) {};
		\node [style=edge] (10) at (-6, 4.5) {};
		\node [style=edge] (11) at (-4, 4.5) {};
		\node [style=edge] (12) at (-2, 4.5) {};
		\node [style=edge] (13) at (0, 4.5) {};
		\node [style=vertex] (14) at (-7, 4) {};
		\node [style=vertex] (15) at (-5, 4) {};
		\node [style=vertex] (16) at (-3, 4) {};
		\node [style=vertex] (17) at (-1, 4) {};
		\node [style=edge] (18) at (-7, 3) {};
		\node [style=edge] (19) at (-5, 3) {};
		\node [style=edge] (20) at (-3, 3) {};
		\node [style=edge] (21) at (-1, 3) {};
		\node [style=vertex] (22) at (-8, 2.5) {};
		\node [style=vertex] (23) at (-6, 2.5) {};
		\node [style=vertex] (24) at (-4, 2.5) {};
		\node [style=vertex] (25) at (-2, 2.5) {};
		\node [style=vertex] (26) at (0, 2.5) {};
		\node [style=edge] (27) at (-8, 1.5) {};
		\node [style=edge] (28) at (-6, 1.5) {};
		\node [style=edge] (29) at (-4, 1.5) {};
		\node [style=edge] (30) at (-2, 1.5) {};
		\node [style=edge] (31) at (0, 1.5) {};
		\node [style=vertex] (32) at (-7, 1) {};
		\node [style=vertex] (33) at (-5, 1) {};
		\node [style=vertex] (34) at (-3, 1) {};
		\node [style=vertex] (35) at (-1, 1) {};
		\node [style=none] (36) at (-8, 6.5) {};
		\node [style=none] (37) at (-7, 6.5) {};
		\node [style=none] (38) at (-5, 6.5) {};
		\node [style=none] (39) at (-3, 6.5) {};
		\node [style=none] (40) at (-1, 6.5) {};
		\node [style=none] (41) at (-1, 0.5) {};
		\node [style=none] (42) at (-3, 0.5) {};
		\node [style=none] (43) at (-5, 0.5) {};
		\node [style=none] (44) at (-7, 0.5) {};
		\node [style=none] (45) at (0, 6.5) {};
		\node [style=none] (46) at (0, 0.5) {};
		\node [style=none] (47) at (-8, 0.5) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		 \draw (4) to (0);
		\draw (0) to (5);
		\draw (5) to (10);
		\draw (10) to (14);
		\draw (14) to (9);
		\draw (4) to (9);
		\draw (5) to (1);
		\draw (0) to (37.center);
		\draw (1) to (38.center);
		\draw (1) to (6);
		\draw (6) to (11);
		\draw (11) to (15);
		\draw (15) to (10);
		\draw (6) to (2);
		\draw (2) to (7);
		\draw (7) to (12);
		\draw (12) to (16);
		\draw (16) to (11);
		\draw (7) to (3);
		\draw (3) to (8);
		\draw (8) to (13);
		\draw (13) to (17);
		\draw (17) to (12);
		\draw (14) to (18);
		\draw (18) to (22);
		\draw (18) to (23);
		\draw [in=90, out=-90] (23) to (28);
		\draw (28) to (32);
		\draw (32) to (27);
		\draw (27) to (22);
		\draw (23) to (19);
		\draw (19) to (15);
		\draw (20) to (24);
		\draw (24) to (19);
		\draw (20) to (16);
		\draw (17) to (21);
		\draw (21) to (25);
		\draw (25) to (20);
		\draw (21) to (26);
		\draw (3) to (40.center);
		\draw (2) to (39.center);
		\draw (31) to (26);
		\draw (31) to (35);
		\draw (35) to (41.center);
		\draw (35) to (30);
		\draw (30) to (25);
		\draw (24) to (29);
		\draw (29) to (33);
		\draw (33) to (28);
		\draw (32) to (44.center);
		\draw (33) to (43.center);
		\draw (34) to (42.center);
		\draw (34) to (29);
		\draw (34) to (30);
		\draw (36.center) to (45.center);
		\draw (45.center) to (46.center);
		\draw (47.center) to (46.center);
		\draw (47.center) to (36.center);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[Hexagon hypermap]{A hypermap with hexagonal faces, embedded on a torus.}
\label{fig:hexagon}
\end{figure}
\end{ex}

\begin{ex}
The hypermap in Figure \ref{fig:4x4square} has 32 darts, 8 vertices, 8 edges and 16 faces. The dual hypermap can be seen in Figure \ref{fig:4x4squareDual}. We choose a basis for $\mathcal{W}/\imath(\mathcal{E})$ corresponding to all the darts except the ones below each edge. Computer search shows that the minimum distance is 4 and thus this is a $[24,2,4]$ code. Compare this to the toric code of minimum distance 4 which is a $[32,2,4]$ code.
\begin{figure}[p!]
\centering
\begin{tikzpicture}
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (-7, 6) {};
		\node [style=vertex] (1) at (-3, 6) {};
		\node [style=vertex] (2) at (-5, 4) {};
		\node [style=vertex] (3) at (-1, 4) {};
		\node [style=vertex] (4) at (-7, 2) {};
		\node [style=vertex] (5) at (-3, 2) {};
		\node [style=vertex] (6) at (-5, 0) {};
		\node [style=vertex] (7) at (-1, 0) {};
		\node [style=edge] (8) at (-5, 6) {};
		\node [style=edge] (9) at (-1, 6) {};
		\node [style=edge] (10) at (-7, 4) {};
		\node [style=edge] (11) at (-3, 4) {};
		\node [style=edge] (12) at (-5, 2) {};
		\node [style=edge] (13) at (-1, 2) {};
		\node [style=edge] (14) at (-7, 0) {};
		\node [style=edge] (15) at (-3, 0) {};
		\node [style=none] (16) at (-8, 6) {};
		\node [style=none] (17) at (-7, 7) {};
		\node [style=none] (18) at (-8, 7) {};
		\node [style=none] (19) at (-8, 4) {};
		\node [style=none] (20) at (-8, 2) {};
		\node [style=none] (21) at (-8, 0) {};
		\node [style=none] (22) at (-8, -1) {};
		\node [style=none] (23) at (-7, -1) {};
		\node [style=none] (24) at (-5, -1) {};
		\node [style=none] (25) at (-3, -1) {};
		\node [style=none] (26) at (-1, -1) {};
		\node [style=none] (27) at (0, -1) {};
		\node [style=none] (28) at (0, 0) {};
		\node [style=none] (29) at (0, 2) {};
		\node [style=none] (30) at (0, 4) {};
		\node [style=none] (31) at (0, 6) {};
		\node [style=none] (32) at (0, 7) {};
		\node [style=none] (33) at (-1, 7) {};
		\node [style=none] (34) at (-3, 7) {};
		\node [style=none] (35) at (-5, 7) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (18.center) to (22.center);
		\draw (22.center) to (27.center);
		\draw (27.center) to (32.center);
		\draw (32.center) to (18.center);
		\draw (17.center) to (0);
		\draw (0) to (16.center);
		\draw (0) to node[below]{1} (8);
		\draw (8) to node[left]{2} (35.center);
		\draw (34.center) to (1);
		\draw (1) to node[above]{3} (8);
		\draw (1) to node[below]{5} (9);
		\draw (9) to node[left]{6} (33.center);
		\draw (9) to node[above]{7} (31.center);
		\draw (9) to node[right]{8} (3);
		\draw (3) to (30.center);
		\draw (3) to node[above]{15} (11);
		\draw (11) to node[left]{14} (1);
		\draw (11) to node[below]{13} (2);
		\draw (2) to node[right]{4} (8);
		\draw [in=0, out=180] (2) to node[above]{11} (10);
		\draw (10) to node[left]{10} (0);
		\draw (10) to node[below]{9} (19.center);
		\draw (4) to (20.center);
		\draw (4) to node[right]{12} (10);
		\draw (4) to node[below]{17} (12);
		\draw [in=-90, out=90] (12) to node[left]{18} (2);
		\draw (11) to node[right]{16} (5);
		\draw (15) to node[left]{30} (5);
		\draw (15) to node[below]{29} (6);
		\draw (6) to node[right]{20} (12);
		\draw (12) to node[above]{19} (5);
		\draw (5) to node[below]{21} (13);
		\draw (13) to node[right]{24} (7);
		\draw (7) to node[above]{31} (15);
		\draw (13) to node[above]{23} (29.center);
		\draw [in=-90, out=90] (13) to node[left]{22} (3);
		\draw (4) to node[left]{26} (14);
		\draw (14) to node[below]{25} (21.center);
		\draw (14) to node[right]{28} (23.center);
		\draw (6) to (24.center);
		\draw (6) to node[above]{27} (14);
		\draw (15) to node[right]{32} (25.center);
		\draw (7) to (26.center);
		\draw (7) to (28.center);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[$4\times4$ square hypermap]{A hypermap with square faces, embedded on a torus.}
\label{fig:4x4square}
\end{figure}

\begin{figure}[p!]
\centering
\begin{tikzpicture}[x=1.8 cm, y=1.8 cm]
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (-7, 6) {};
		\node [style=vertex] (1) at (-3, 6) {};
		\node [style=vertex] (2) at (-5, 4) {};
		\node [style=vertex] (3) at (-1, 4) {};
		\node [style=vertex] (4) at (-7, 2) {};
		\node [style=vertex] (5) at (-3, 2) {};
		\node [style=vertex] (6) at (-5, 0) {};
		\node [style=vertex] (7) at (-1, 0) {};
		\node [style=edge] (8) at (-5, 6) {};
		\node [style=edge] (9) at (-1, 6) {};
		\node [style=edge] (10) at (-7, 4) {};
		\node [style=edge] (11) at (-3, 4) {};
		\node [style=edge] (12) at (-5, 2) {};
		\node [style=edge] (13) at (-1, 2) {};
		\node [style=edge] (14) at (-7, 0) {};
		\node [style=edge] (15) at (-3, 0) {};
		\node [style=none] (16) at (-8, 6) {};
		\node [style=none] (17) at (-7, 7) {};
		\node [style=dualVertex] (18) at (-8, 7) {};
		\node [style=none] (19) at (-8, 4) {};
		\node [style=none] (20) at (-8, 2) {};
		\node [style=none] (21) at (-8, 0) {};
		\node [style=dualVertex] (22) at (-8, -1) {};
		\node [style=none] (23) at (-7, -1) {};
		\node [style=none] (24) at (-5, -1) {};
		\node [style=none] (25) at (-3, -1) {};
		\node [style=none] (26) at (-1, -1) {};
		\node [style=none] (27) at (0, -1) {};
		\node [style=none] (28) at (0, 0) {};
		\node [style=none] (29) at (0, 2) {};
		\node [style=none] (30) at (0, 4) {};
		\node [style=none] (31) at (0, 6) {};
		\node [style=dualVertex] (32) at (0, 7) {};
		\node [style=none] (33) at (-1, 7) {};
		\node [style=none] (34) at (-3, 7) {};
		\node [style=none] (35) at (-5, 7) {};
		\node [style=dualVertex] (36) at (-6, 5) {};
		\node [style=dualVertex] (37) at (-4, 5) {};
		\node [style=dualVertex] (38) at (-2, 5) {};
		\node [style=dualVertex] (39) at (-2, 3) {};
		\node [style=dualVertex] (40) at (-4, 3) {};
		\node [style=dualVertex] (41) at (-6, 3) {};
		\node [style=dualVertex] (42) at (-6, 1) {};
		\node [style=dualVertex] (43) at (-4, 1) {};
		\node [style=dualVertex] (44) at (-2, 1) {};
		\node [style=dualVertex] (45) at (-6, -1) {};
		\node [style=dualVertex] (46) at (-4, -1) {};
		\node [style=dualVertex] (47) at (-2, -1) {};
		\node [style=dualVertex] (48) at (0, -1) {};
		\node [style=dualVertex] (49) at (0, 1) {};
		\node [style=dualVertex] (50) at (0, 3) {};
		\node [style=dualVertex] (51) at (0, 5) {};
		\node [style=dualVertex] (52) at (-8, 5) {};
		\node [style=dualVertex] (53) at (-8, 3) {};
		\node [style=dualVertex] (54) at (-8, 1) {};
		\node [style=dualVertex] (55) at (-6, 7) {};
		\node [style=dualVertex] (56) at (-4, 7) {};
		\node [style=dualVertex] (57) at (-2, 7) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (18) to (22);
		\draw (22) to (27.center);
		\draw (27.center) to (32);
		\draw (32) to (18);
		\draw (17.center) to (0);
		\draw (0) to (16.center);
		\draw (0) to node[below]{1} (8);
		\draw (8) to node[left]{2} (35.center);
		\draw (34.center) to (1);
		\draw (1) to node[above]{3} (8);
		\draw (1) to node[below]{5} (9);
		\draw (9) to node[left]{6} (33.center);
		\draw (9) to node[above]{7} (31.center);
		\draw (9) to node[right]{8} (3);
		\draw (3) to (30.center);
		\draw (3) to node[above]{15} (11);
		\draw (11) to node[left]{14} (1);
		\draw (11) to node[below]{13} (2);
		\draw (2) to node[right]{4} (8);
		\draw [in=0, out=180] (2) to node[above]{11} (10);
		\draw (10) to node[left]{10} (0);
		\draw (10) to node[below]{9} (19.center);
		\draw (4) to (20.center);
		\draw (4) to node[right]{12} (10);
		\draw (4) to node[below]{17} (12);
		\draw (12) to node[left]{18} (2);
		\draw (11) to node[right]{16} (5);
		\draw (15) to node[left]{30} (5);
		\draw (15) to node[below]{29} (6);
		\draw (6) to node[right]{20} (12);
		\draw (12) to node[above]{19} (5);
		\draw (5) to node[below]{21} (13);
		\draw (13) to node[right]{24} (7);
		\draw (7) to node[above]{31} (15);
		\draw (13) to node[above]{23} (29.center);
		\draw (13) to node[left]{22} (3);
		\draw (4) to node[left]{26} (14);
		\draw (14) to node[below]{25} (21.center);
		\draw (14) to node[right]{28} (23.center);
		\draw (6) to (24.center);
		\draw (6) to node[above]{27} (14);
		\draw (15) to node[right]{32} (25.center);
		\draw (7) to (26.center);
		\draw (7) to (28.center);
		\draw [color=red] (36) to node[left]{1} (8);
		\draw [color=red, in=45, out=-135] (36) to node[right]{11} (10);
		\draw [color=red] (37) to node[left]{4} (8);
		\draw [color=red] (37) to node[right]{14} (11);
		\draw [color=red] (11) to node[right]{15} (38);
		\draw [color=red] (38) to node[left]{5} (9);
		\draw [color=red] (9) to node[left]{8} (51);
		\draw [color=red] (11) to node[left]{13} (40);
		\draw [color=red] (40) to node[right]{19} (12);
		\draw [color=red] (12) to node[right]{18} (41);
		\draw [color=red] (41) to node[left]{12} (10);
		\draw [color=red] (11) to node[left]{16} (39);
		\draw [color=red] (39) to node[right]{22} (13);
		\draw [color=red] (13) to node[right]{23} (50);
		\draw [color=red] (8) to node[below]{3} (56);
		\draw [color=red] (9) to node[above]{6} (57);
		\draw [color=red] (9) to node[right]{7} (32);
		\draw [color=red] (10) to node[right]{10} (52);
		\draw [color=red] (10) to node[left]{9} (53);
		\draw [color=red] (12) to node[left]{17} (42);
		\draw [color=red] (12) to node[left]{20} (43);
		\draw [color=red] (13) to node[left]{21} (44);
		\draw [color=red] (13) to node[left]{24} (49);
		\draw [color=red] (15) to node[right]{30} (43);
		\draw [color=red] (15) to node[above]{29} (46);
		\draw [color=red] (15) to node[right]{31} (44);
		\draw [color=red] (45) to node[below]{28} (14);
		\draw [color=red] (14) to node[right]{27} (42);
		\draw [color=red] (14) to node[right]{26} (54);
		\draw [color=red] (14) to node[left]{25} (22);
		\draw [color=red] (8) to node[above]{2} (55);
		\draw [color=red, in=135, out=-45] (15) to node[below]{32} (47);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[$4\times4$ square hypermap with dual]{A hypermap with square faces, embedded on a torus. The dual hypermap is shown in red.}
\label{fig:4x4squareDual}
\end{figure}

\end{ex}

\begin{ex}
The hypermap in Figure \ref{fig:DLCube} is based on a graph embedding from \cite{gagarin2003embeddings} which is described as the dual of the line graph of a cube. We choose a basis for $\mathcal{W}/\imath(\mathcal{E})$ corresponding to all the darts whose labels are not divisible by 6. Computer calculations show that this gives rise to a $[20,2,3]$ code. 
\begin{figure}[p!]
\centering
\begin{tikzpicture}[x=2 cm, y=2 cm]
	\begin{pgfonlayer}{nodelayer}
		\node [style=vertex] (0) at (-4, 0) {};
		\node [style=vertex] (1) at (-2, 1) {};
		\node [style=vertex] (2) at (-1, 1.5) {};
		\node [style=vertex] (3) at (1, 2.5) {};
		\node [style=edge] (4) at (-3, 0.5) {};
		\node [style=edge] (5) at (0, 2) {};
		\node [style=vertex] (6) at (-3.75, 3) {};
		\node [style=vertex] (7) at (0.5, -0.5) {};
		\node [style=vertex] (8) at (-1.5, -1.5) {};
		\node [style=vertex] (9) at (-2.25, -2) {};
		\node [style=edge] (10) at (-0.5, -1) {};
		\node [style=edge] (11) at (-3.25, -2.5) {};
		\node [style=none] (12) at (-4.5, 3.5) {};
		\node [style=none] (13) at (-4.5, -3) {};
		\node [style=none] (14) at (2, 3.5) {};
		\node [style=none] (15) at (2, -3) {};
		\node [style=none] (16) at (-4, 3.5) {};
		\node [style=none] (17) at (-3.5, 3.5) {};
		\node [style=none] (18) at (-3.5, -3) {};
		\node [style=none] (19) at (-3, -3) {};
		\node [style=none] (20) at (-4.5, 0.5) {};
		\node [style=none] (21) at (2, 1.5) {};
		\node [style=none] (22) at (-4.5, -1.75) {};
		\node [style=none] (23) at (2, -1.75) {};
		\node [style=none] (24) at (-1.5, 3.5) {};
		\node [style=none] (25) at (-1, 3.5) {};
		\node [style=none] (26) at (-1, -3) {};
		\node [style=none] (27) at (-1.5, -3) {};
		\node [style=none] (28) at (-4.5, -2.5) {};
		\node [style=none] (29) at (-4, -3) {};
		\node [style=none] (30) at (-3, 3.5) {};
		\node [style=none] (31) at (-2.5, 3.5) {};
		\node [style=none] (32) at (-2.5, -3) {};
		\node [style=none] (33) at (0.5, 3.5) {};
		\node [style=none] (34) at (0.5, -3) {};
		\node [style=none] (35) at (2, -2.5) {};
		\node [style=none] (36) at (-4.5, 1.5) {};
		\node [style=none] (37) at (2, 0.5) {};
	\end{pgfonlayer}
	\begin{pgfonlayer}{edgelayer}
		\draw (0) to node[below]{1} (4);
		\draw [in=-153, out=27] (4) to node[above]{4} (1);
		\draw (2) to node[below]{7} (5);
		\draw (5) to node[above]{10} (3);
		\draw (1) to node[below left]{20} (10);
		\draw (10) to node[left]{21} (2);
		\draw (10) to node[below]{19} (8);
		\draw (10) to node[above]{22} (7);
		\draw (9) to node[above]{15} (11);
		\draw (4) to node[left]{3} (6);
		\draw (4) to node[right]{6} (9);
		\draw (4) to node[above]{5} (8);
		\draw (12.center) to (14.center);
		\draw (14.center) to (15.center);
		\draw (15.center) to (13.center);
		\draw (13.center) to (12.center);
		\draw (7) to node[right]{12} (5);
		\draw (6) to node[right]{23} (16.center);
		\draw (6) to node[right]{18} (17.center);
		\draw (11) to node[right]{18} (18.center);
		\draw (11) to node[right]{17} (19.center);
		\draw (0) to node[above]{11} (20.center);
		\draw (3) to node[left]{2} (21.center);
		\draw (11) to node[below]{13} (22.center);
		\draw (23.center) to node[below]{13} (7);
		\draw (11) to node[left]{14} (0);
		\draw (5) to node[left]{9} (25.center);
		\draw (5) to node[left]{8} (24.center);
		\draw (9) to node[left]{8} (27.center);
		\draw (8) to node[left]{9} (26.center);
		\draw (29.center) to node[above right]{23} (28.center);
		\draw (1) to node[right]{17} (30.center);
		\draw (2) to node[right]{16} (31.center);
		\draw (11) to node[above right]{16} (32.center);
		\draw (3) to node[right]{24} (33.center);
		\draw (34.center) to node[right]{24} (10);
		\draw (10) to node[above]{23} (35.center);
		\draw (37.center) to node[above right]{11} (5);
		\draw (4) to node[below]{2} (36.center);
	\end{pgfonlayer}
\end{tikzpicture}
\caption[Dual(L(Cube)) hypermap]{A hypermap based on the dual of the line graph of a cube.}
\label{fig:DLCube}
\end{figure}

\end{ex}

\clearpage

\section{Finding weights given a special basis}\label{sec:specialBasis}
We choose, for each edge of the hypermap, one dart adjacent to that edge. Call this set of darts $S$, for `special darts'\index{special basis}. Then we choose a basis of $\mathcal{W}/\imath(\mathcal{E})$ which is $W\setminus S$. With a basis chosen we have a weight function on $\mathcal{W}/\imath(\mathcal{E})$ with the weight of $x+\imath(\mathcal{E})$ given by the number of nonzero basis vectors in its representation in this `special basis'.

If we look at the proof of Proposition \ref{prop:H1asClassical} then we see that $\mu \colon \ker\partial_1\setminus\im\partial_2 \to \ker\overline{d}_1\setminus\im\overline{d}_2$ is a bijection. Thus we can say that \[\operatorname{minwt}(C_X\setminus C_Z^\perp)=\operatorname{minwt}\{\mu^{-1}(x) \colon x\in \ker\overline{d}_1\setminus\im\overline{d}_2\}.\]
Now we seek to understand how we can find the weight of $\mu^{-1}(x)$ given $x$. We can choose an ordering of the darts around each edge using two cases. If the special dart adjacent to the edge is in $x$ then choose the pairing of darts so that the edge is at the end of a pair not the start. If the special dart is not in $x$ then we can choose an ordering of the darts so that the special dart is not between two paired darts. In both cases $\mu^{-1}(x)$ does not contain any special darts. Now $\mu^{-1}(x)$ is uniquely determined and we have chosen a representation of $\mu^{-1}(x)$ without any special darts so the weight of $\mu^{-1}(x)$ is just the number of darts in its sum. We see also that
\begin{align*}
&\operatorname{wt}(\mu^{-1}(x))=\frac{1}{2}\operatorname{wt}(x)+\\
&\text{\# of non-} x \text{ darts as we go counterclockwise around edges avoiding special darts.}
\end{align*}
One way to understand this is to imagine that at each of the darts that we skip as we go around an edge our cycle traverses that dart twice. Then every cycle in $\ker\overline{d}_1$ can be thought of as a cycle that does not skip darts around edges and $\mu^{-1}$ of that cycle is of weight half the weight of the cycle.

With the basis $W\setminus S$ chosen then we can identify vector spaces with their duals in the standard way and then the coboundary operators are given by transposes of boundary operators. If we look at the matrices $\delta_1=H_X^T$ and $\delta_2=H_Z$ then we see that $\delta_1$ takes vertices to non-special darts and $\delta_2$ takes non-special darts to faces so we will identify $(\mathcal{W}/\imath(\mathcal{E}))^*$ with $\mathcal{W}/\langle S\rangle$. Thus our hypermap-cohomology will be
\[\mathcal{V} \stackrel{\delta_1}{\to} \mathcal{W}/\langle S\rangle \stackrel{\delta_2}{\to} \mathcal{F}\]
where
\begin{align*}
\delta_1(v)&=\text{sum of non-special darts whose $\partial_1$-boundary contains $v$}\\
&=\text{map-boundary of face $v$ in dual hypermap without special darts}
\end{align*}
and
\begin{align*}
\delta_2(w_i)&=\text{faces whose $\partial_2$-boundaries contain $w_i$}\\
&=f_{\ni i}+f_{\ni \text{special dart of } e_{\ni i}}.
\end{align*}

We can also consider the classical cohomology of the bipartite graph representation of the hypermap. This is
\[\mathcal{V} \stackrel{\overline{\delta}_1}{\to} \mathcal{W} \stackrel{\overline{\delta}_2}{\to} \mathcal{F}\oplus\mathcal{E}\]
where \[\overline{\delta}_1(v)=\text{map-boundary of face $v$ in dual-hypermap}\]
and
\[\overline{\delta}_2(w_i)=f_{\ni i}+e_{\ni i}.\]

\begin{prop}\label{prop:cohomologyClassicalHomOfDual}
\[H^1 = \frac{\ker\delta_2}{\im\delta_1} \cong \frac{\ker \overline{\delta}_2}{\im \overline{\delta}_1}.\] 
\end{prop}
\begin{proof}
Consider the diagram
\[\begin{tikzcd}[ampersand replacement=\&]
\& \mathcal{V} \arrow{r}{\overline{\delta}_1} \arrow{d}{id} \& \mathcal{W} \arrow{r}{\overline{\delta}_2}\arrow{d}{\pi} \& \mathcal{E}\oplus\mathcal{F}\arrow{d}{\lambda}\\
\&\mathcal{V} \arrow{r}{\delta_1} \& \mathcal{W}/\langle S\rangle \arrow{r}{\delta_2} \& \mathcal{F}
\end{tikzcd}\]
where $\pi$ is the projection $\mathcal{W}\to\mathcal{W}/\langle S\rangle$ and $\lambda$ is defined by $\lambda(f_i)=f_i$ and $\lambda(e_i)=f_{\ni\text{special dart of } e_i}$.

This diagram is commutative because
\[\delta_1(v)=\text{map-boundary of face $v$ in dual hypermap without special darts}=\pi(\overline{\delta}_1(v))\] and
\begin{align*}
\lambda(\overline{\delta}_2(w_i))&=\lambda(f_{\ni i}+e_{\ni i})\\
&=f_{\ni i}+f_{\ni\text{special dart of } e_{\ni i}}\\
&=\delta_2(\pi(w_i))
\end{align*}
because $f_{\ni i}+f_{\ni\text{special dart of } e_{\ni i}}=0$ precisely when $w_i \in S$.

Now $\im \delta_1=\im(\pi\circ\overline{\delta}_1)=\pi(\im\overline{\delta}_1)$ and as usual we know that $\pi(\ker\delta_2)\subseteq\ker\delta_2$. We now show the opposite inclusion. If $x\in \ker\delta_2$, define $w\in \mathcal{W}$ to contain all the darts of $x$ and then for each edge of the hypermap, if there are an odd number of darts in $x$ adjacent to that edge, add the special dart adjacent to that edge to $w$. Clearly $\pi(w)=x$, we now claim that $w\in \ker\overline{\delta_2}$. To see this, note that
\[\lambda(\overline{\delta}_2(w))=\delta_2(\pi(w))=\delta_2(x)=0\]
and
\[\overline{\delta}_2(w)=\overline{\delta}_2\left(\sum_{i\in I} w_i\right)=\sum_{i\in I}\left(f_{\ni i}+e_{\ni i}\right)=\sum_{i\in I}f_{\ni i}\]
because each edge has an even number of darts of $w$ adjacent. Thus $\lambda(\overline{\delta}_2(w))=\overline{\delta}_2(w)$ and $w\in \ker\overline{\delta_2}$ as desired.

Finally if $w\in \ker\pi \cap\ker\overline{\delta}_2$ then $w$ is a sum of special darts which is a classical cycle in the dual hypermap. In particular each edge is adjacent to an even number of darts in $w$. But each edge is adjacent to only one special dart in the whole hypermap so we must have $w=0$. Thus $\ker\pi \cap\ker\overline{\delta}_2 \subseteq \im\overline{\delta}_1$ and Lemma \ref{lem:inducedIsomorphism} tells us that $\pi_*$ is an isomorphism.
\end{proof}

\begin{cor}
There is a bijection
\[\pi \colon \ker \overline{\delta}_2\setminus\im \overline{\delta}_1 \to \ker\delta_2\setminus\im\delta_1\]
which takes non-boundary cycles of hypermap-cohomology to non-boundary classical cycles of the dual hypermap.
\end{cor}

\begin{cor}
$\operatorname{minwt}(C_Z\setminus C_X^\perp)$ is given by the minimum weight of a non-boundary classical cycle in the dual hypermap where non-special darts have weight 1 and special darts have weight 0.
\end{cor}

\begin{ex}\label{ex:mbymsquaregrid}
Take an $m\times m$ square grid hypermap embedded on the torus with $m$ even and the special darts chosen to be the darts underneath each edge  (see Figure \ref{fig:4x4squareDual} for the hypermap and its dual in the $m=4$ case, where the special darts are those with labels divisible by 4). Then we have an $[N,k,d]$ code with $N=n-|E|=2m^2-(1/2)m^2=(3/2)m^2$ and $k=2g=2$.

For $\minwt(C_Z\setminus C_X^\perp)$ notice that there is a path in the dual hypermap of length $2m$ with half of the darts special darts. Also there are no paths in the dual hypermap of classical weight less than $2m$ so $\minwt(C_Z\setminus C_X^\perp)=m$.

For $\minwt(C_X\setminus C_Z^\perp)$ notice that a horizontal or vertical classical cycle $x\in\ker\overline{d}_1\setminus\im\overline{d}_2$ in the hypermap has $\wt(\mu^{-1}(x))=m$. To see this is the minimum weight, if $x\in\ker\overline{d}_1\setminus\im\overline{d}_2$ then $x$ is not a boundary so without loss of generality $x$ has at least $m$ horizontal darts. But $\mu(\mu^{-1}(x))=x$ and $\mu$ takes $w_i$ to $w_i$ plus $w_i$ rotated around an edge. Therefore $\mu$ acting on one dart can only ever lead to 1 horizontal dart so we must in fact have $\wt(\mu^{-1}(x))\geq m$.

Thus we have a $[(3/2)m^2,2,m]$ code with $k=2$ and $d=\sqrt{\frac{2}{3}N}$, so $kd^2=\frac{4}{3}N$.
\end{ex}

\section{Future work}
Many questions about hypermap-homology codes remain unanswered. We mention a few of them here:
\begin{enumerate}
\item Must hypermap-homology codes with a special basis satisfy $kd^2<cN$ for some constant $c$?
\item Can we analyze hypermap-homology codes with a non-special basis?
\item Can we find families of hypermaps which lead to better performance than the square grid hypermap?
\item Can we construct `planar hypermap-homology codes'?
\item Can we analyze the performance of randomly generated hypermap-homology codes?
\end{enumerate}

\appendix
\chapter{Software}
\section{Matlab software for hypermap-homology codes}\label{sec:OOsoftware}
We implemented an object-oriented package in Matlab to work with hypermap-homology codes. This includes classes for permutations, hypermaps and CSS codes. The use of this package in this dissertation is restricted to determining the parameters $[n,k,d]$ of a code generated by an input hypermap $(\sigma,\alpha)$. We now describe the simple algorithms we use to do this.

First we check if $\langle \sigma,\alpha\rangle\leq S_n$ is transitive. This algorithm comes from \cite{holt2005handbook}.

\algsetup{indent=1em}
\begin{algorithm}[h]
	\caption{CheckTransitive($\sigma$,$\alpha$)}
	\begin{algorithmic}[1]
		\REQUIRE $\sigma ,\alpha \in S_n$
		\ENSURE Output whether $\langle \sigma,\alpha\rangle$ is transitive
		\medskip
		\STATE Set $\mathrm{Orbit}=\{1\}$
		\REPEAT
			\FOR {$i=1,\dots,n$}
				\STATE Set $\mathrm{Orbit}=\mathrm{Orbit}\cup\{\sigma(i), \alpha(i)\}$
			\ENDFOR
		\UNTIL {$\mathrm{Orbit}$ did not change in last iteration}
		\IF {$|\mathrm{Orbit}|=n$}
			\RETURN `Yes'
		\ELSE
			\RETURN `No'
		\ENDIF
	\end{algorithmic}
\end{algorithm}

After finding the matrices $H_X$ and $H_Z$ using the definitions in Chapter \ref{ch:hypermapHomologyCodes} we can then determine the parameters of the associated code.

\algsetup{indent=1em}
\begin{algorithm}[ht]
	\caption{FindParameters($H_X$,$H_Z$)}
	\begin{algorithmic}[1]
		\REQUIRE Binary matrices $H_X$ and $H_Z$ with $H_XH_Z^T=0$
		\ENSURE Output parameters $[n,k,d]$
		\medskip
		\STATE Set $n=\mbox{width of matrix } H_X$
		\STATE Find $\rank(H_X)$ and $\rank(H_Z)$ by putting these matrices in RREF
		\STATE Set $k=n-\rank(H_X)-\rank(H_Z)$
		\STATE Find generator matrices $G_X$, $G_Z$ by finding nullspace of $H_X$, $H_Z$
		\STATE Set $k_X$ to the height of $G_X$ and $k_Z$ to the height of $G_Z$
		\STATE Set $d=\infty$
		\FORALL {$u \in \F_2^{k_X}$}
			\STATE Set $c=G_X u$
			\IF {$0<\wt(c)<d$ and $G_Z^Tc\neq 0$}
				\STATE Set $d=\wt(c)$
			\ENDIF
		\ENDFOR
		\FORALL {$u \in \F_2^{k_Z}$}
			\STATE Set $c=G_Z u$
			\IF {$0<\wt(c)<d$ and $G_X^Tc\neq 0$}
				\STATE Set $d=\wt(c)$
			\ENDIF
		\ENDFOR
		\RETURN $n,k,d$
	\end{algorithmic}
\end{algorithm}




isomath.tex
%====================================================================
%-------------------------------------------------------------------- 
%
%   isomath.tex  LaTeX macros for math conforming to ISO standards
%
%---------------------------------------- this is a LaTeX-2e document
%====================================================================     

%% Blackboard Bold

\newcommand*{\bbb}[1]{\mathbb{#1}}
\newcommand{\bC}{\bbb{C}}
\newcommand{\bN}{\bbb{N}}
\newcommand{\bQ}{\bbb{Q}}
\newcommand{\bR}{\bbb{R}}
\newcommand{\bZ}{\bbb{Z}}
\newcommand{\bF}{\bbb{F}}
\newcommand{\bFp}{\bbb{F}_p}
\newcommand{\bFpn}{\bbb{F}_{p^n}}
\newcommand{\ii}{\mathbf{i}}
\newcommand{\jj}{\mathbf{j}}
\newcommand{\kk}{\mathbf{k}}

\newcommand{\N}{\bN}
\newcommand{\Q}{\bQ}
\newcommand{\R}{\bR}
\newcommand{\Z}{\bZ}
\newcommand{\ZpZ}{\Z/p\Z}
\newcommand{\ZmZ}{\Z/m\Z}
\newcommand{\C}{\bC}
%\newcommand{\F}{\bF}
\newcommand{\F}{\mathbb{F}}
\newcommand{\Fp}{\bFp}
\newcommand{\Fpn}{\bFpn}

%% Calligraphic

\newcommand{\mC}{\mathcal{C}}
\newcommand{\mT}{\mathcal{T}}

%% Miscellaneous

%% Named Functions and Operators

\newcommand{\id}{\mathrm{id}}
\newcommand{\Id}{\mathrm{Id}}
\newcommand{\rank}{\mathrm{rank}}
\newcommand{\supp}{\mathrm{supp}}
\newcommand{\tr}{\mathrm{tr}}
\newcommand{\Aut}{\mathrm{Aut}}
\newcommand{\Gal}{\mathrm{Gal}}
\newcommand{\Hom}{\mathrm{Hom}}
%\newcommand{\im}{\mathrm{im}}
\DeclareMathOperator{\wt}{wt} %%added by martinleslie
\DeclareMathOperator{\im}{im} %%added by martinleslie
\DeclareMathOperator{\minwt}{minwt}%%added by martinleslie
\newcommand{\lcm}{\mathrm{lcm}}
\newcommand{\Tr}{\mathrm{Tr}}
\newcommand{\GL}{\mathrm{GL}}
%\newcommand{\mod}{\textrm{ mod }}

%% Vectors

\usepackage{amsbsy}
\renewcommand*{\vec}[1]{\boldsymbol{#1}}
\newcommand{\va}{\vec{a}}
\newcommand{\vb}{\vec{b}}
\newcommand{\vc}{\vec{c}}
\newcommand{\vx}{\vec{x}}
\newcommand{\vy}{\vec{y}}
\newcommand{\vz}{\vec{z}}
\newcommand{\vu}{\vec{u}}
\newcommand{\vv}{\vec{v}}
\newcommand{\vw}{\vec{w}}

%% Logical Propositions

\newcommand*{\pro}[1]{\mathsf{#1}}
\newcommand{\pP}{\pro{P}}
\newcommand{\pQ}{\pro{Q}}
\newcommand{\pR}{\pro{R}}

%% Matrices and Tensors

%\DeclareMathAlphabet{\mathsfsl}{OT1}{cmss}{m}{sl}
\newcommand*{\mat}[1]{\mathsfsl{#1}}
\newcommand{\mM}{\mat{M}}
\newcommand{\mD}{\mat{D}}
\newcommand{\mI}{\mat{I}}

%% Special Numbers and Characters

\newcommand{\re}{\mathrm{e}}
\newcommand{\ri}{\mathrm{i}}
\newcommand{\rd}{\mathrm{d}} % differential
\newcommand{\dif}[1]{\,\rd{#1}} % differential
\newcommand{\df}{\dif{f}}
\newcommand{\dx}{\dif{x}}
\newcommand{\dy}{\dif{y}}
\newcommand{\dz}{\dif{z}}
\newcommand{\dt}{\dif{t}}
\newcommand{\rpi}{\pi}       % actually, pi should be upright.

\newcommand{\rE}{\mathsf{E}}
\newcommand{\rF}{\mathsf{F}}
\newcommand{\rI}{\mathsf{I}}
\newcommand{\rK}{\mathsf{K}}
\newcommand{\rL}{\mathsf{L}}
\newcommand{\rM}{\mathsf{M}}
\newcommand{\rN}{\mathsf{N}}
\newcommand{\rP}{\mathsf{P}}
\newcommand{\rT}{\mathsf{T}}
\newcommand{\rU}{\mathsf{U}}
\newcommand{\rV}{\mathsf{V}}
\newcommand{\rW}{\mathsf{W}}
\newcommand{\rX}{\mathsf{X}}
\newcommand{\rY}{\mathsf{Y}}
\newcommand{\rZ}{\mathsf{Z}}

mathenv.tex
%====================================================================
%
%  mathenv.tex  math environments  version 0.00
%
%====================================================================

\usepackage{ifthen}

\theoremstyle{plain}
%\newtheorem{thm}{Theorem}[subsection]
\newtheorem{thm}[equation]{Theorem}
\newtheorem{cor}[equation]{Corollary}
\newtheorem{lem}[equation]{Lemma}
\newtheorem{prop}[equation]{Proposition}
\newtheorem{ax}[equation]{Axiom}
\newtheorem*{thm*}{Theorem}
\newtheorem*{cor*}{Corollary}
\newtheorem*{lem*}{Lemma}
\newtheorem*{prop*}{Proposition}
\newtheorem*{ax*}{Axiom}

\theoremstyle{definition}
\newtheorem{defn}[equation]{Definition}
\newtheorem{problem}{Problem}
\newtheorem*{defn*}{Definition}
\newtheorem*{problem*}{Problem}
\newtheorem{ex}[equation]{Example}
\newtheorem{exs}[equation]{Examples}
\newtheorem*{ex*}{Example}
\newtheorem*{exs*}{Examples}

%\theoremstyle{remark}
\newtheorem{rem}[equation]{Remark}
\newtheorem*{rem*}{Remark}
\newtheorem{aside}[equation]{Aside}
\newtheorem*{aside*}{Aside}
\newtheorem{intuition}[equation]{Intuition}
\newtheorem*{intuition*}{Intuition}
\newtheorem{notn}[equation]{Notation}
\newtheorem*{notn*}{Notation}
\newtheorem{conv}[equation]{Convention}
\newtheorem*{conv*}{Convention}
\newtheorem{interp}[equation]{Interpretation}
\newtheorem*{interp*}{Interpretation}
\newtheorem{mnem}[equation]{Mnemonic}
\newtheorem*{mnem*}{Mnemonic}
\newtheorem{exer}[equation]{Exercise}
\newtheorem*{exer*}{Exercise}
\newtheorem{conjecture}[equation]{Conjecture}
\newtheorem*{conjecture*}{Conjecture}

%\numberwithin{equation}{subsection}
%\numberwithin{equation}{section}

%\newcommand{\beginex}{\begin{ex}$\blacktriangleright$ }
%\newcommand{\mendex}{\hfill$\blacktriangleleft$\end{ex}}
\newcommand{\beginex}{\begin{ex}$\rhd$ }
\newcommand{\mendex}{\hfill$\lhd$\end{ex}}

%--------------------------------------------------------------------
%
%\newenvironment{problem}[1][]
% {\noindent{\bf#1.\ }}
% {}
%
%--------------------------------------------------------------------

\newenvironment{answer}[1][Answer]
  {\begin{proof}[#1]}
  {\renewcommand{\qedsymbol}{}\end{proof}}

\newenvironment{solution}[1][Solution]
  {\begin{proof}[#1]}
  {\renewcommand{\qedsymbol}{\ensuremath{\Diamond}}\end{proof}}

\newcounter{ppart}
\newenvironment{parts}
 {\begin{list}{\textup(\alph{ppart}\textup)\hfill}
   {\usecounter{ppart}
    \settowidth{\labelwidth}{\textup(m\textup)}
    \setlength{\leftmargin}{0cm} 
    \setlength{\rightmargin}{0cm}
    \setlength{\itemindent}{2em}
    \setlength{\labelsep}{\itemindent}
    \addtolength{\labelsep}{-\labelwidth}
    \renewcommand{\makelabel}[1]{\ifthenelse
     {\equal{##1}{}}
     {\textup{(\alph{ppart})}\hfill}
     {\textup{##1}\hfill}}
   }
 }
 {\end{list}}

%\renewcommand{\labelenumi}{(\roman{enumi})}

\newcommand{\secref}[1]{Section~\textup{\ref{#1}}}
\newcommand{\thmref}[1]{Theorem~\textup{\ref{#1}}}
\newcommand{\corref}[1]{Corollary~\textup{\ref{#1}}}
\newcommand{\lemref}[1]{Lemma~\textup{\ref{#1}}}
\newcommand{\propref}[1]{Proposition~\textup{\ref{#1}}}
\newcommand{\defnref}[1]{Definition~\textup{\ref{#1}}}
\newcommand{\remref}[1]{Remark~\textup{\ref{#1}}}
\newcommand{\exref}[1]{Example~\textup{\ref{#1}}}
\newcommand{\exsref}[1]{Examples~\textup{\ref{#1}}}
\newcommand{\axref}[1]{Axiom~\textup{\ref{#1}}}
\newcommand{\itemref}[1]{\textup{{\ref{#1}}}}

% Vim 7.0 syntax highlighting doesn't seem to kick in unless the .tex
% file has at least one begin-end pair in it.  Go figure.
\newenvironment{vim_bug_workaround}
	{}

%====================================================================


syms.tex

\newcommand*{\ds}[1]{\displaystyle{#1}}

\newcommand*{\bfidx}[1]{\index{#1}\textbf{#1}}
\newcommand*{\bfidxtwo}[2]{\textbf{#1}\index{#2}}
\newcommand*{\bfidxaux}[2]{\index{#1}\index{#2}\textbf{#1}}
\newcommand*{\emphidx}[1]{\index{#1}\emph{#1}}
\newcommand*{\plainidx}[1]{\index{#1}#1}

\newcommand*{\bra}[1]{\langle \, #1 \mid}
\newcommand*{\ket}[1]{\mid #1 \, \rangle}
\newcommand*{\braket}[2]{\langle #1 \mid #2 \rangle}
\newcommand*{\braCket}[3]{\langle #1 \mid #2 \mid #3 \rangle}
\newcommand*{\BraCKet}[3]
	{\Bigg\langle #1 \,\Bigg|\, #2 \,\Bigg|\, #3 \Bigg\rangle}
\newcommand*{\expn}[1]{\langle \, #1 \, \rangle}
\newcommand*{\ketbra}[1]{\ket{ #1 } \bra{ #1 }}
\newcommand*{\TrebH}{\Tr\left(e^{-\beta H}\right)}
\newcommand*{\TrXebH}[1]{\Tr\left(#1 e^{-\beta H}\right)}
\newcommand*{\Trsym}{\Tr_{L^2_{\mathrm{sym}}}}
\newcommand*{\intRdntimes}[2]{\underbrace{
	\int_{\R^{#1}} \int_{\R^{#1}} \cdots \int_{\R^{#1}}}_{#2 \textrm{ times}}}

\newcommand{\lmax}{\ell_{\textrm{max}}}

\newcommand{\ellx}{\ell_{\vecx}}
\newcommand{\elly}{\ell_{\vecy}}

\newcommand{\ellxpi}{\ell_{\vecx}(\pi)}
\newcommand{\ellypi}{\ell_{\vecy}(\pi)}

\newcommand{\ellxpiprime}{\ell_{\vecx}(\pi')}
\newcommand{\ellypiprime}{\ell_{\vecy}(\pi')}

\newcommand{\ellxypi}{\ell_{\vecx,\vecy}(\pi)}
\newcommand{\ellyxpi}{\ell_{\vecy,\vecx}(\pi)}

\newcommand{\essx}{s_{\vecx}}

\newcommand{\essxpi}{s_{\vecx}(\pi)}

\newcommand{\ellxf}{\ell^f_{\vecx}}
\newcommand{\essxf}{s^f_{\vecx}}
\newcommand{\ellmax}{\ell_{\textrm{max}}}
\newcommand{\fM}{f_{\textrm{max}}}
\newcommand{\ellbar}{\overline{\ell}}
\newcommand{\ellfbar}{\overline{\ell}_f}
\newcommand{\essbar}{\overline{s}}
\newcommand{\essfbar}{\overline{s}_f}

\newcommand{\rhocz}{\rho_c^{(0)}}
\newcommand{\rhocal}{\rho_c^{(\alpha)}}
\newcommand{\betacz}{\beta_c^{(0)}}
\newcommand{\betacal}{\beta_c^{(\alpha)}}
\newcommand{\Tcz}{T_c^{(0)}}
\newcommand{\Tcal}{T_c^{(\alpha)}}

\newcommand{\Xt}{X_t}
\newcommand{\Yt}{Y_t}
\newcommand{\Xtk}{X_{t+k}}
\newcommand{\Ytk}{Y_{t+k}}

\newcommand{\cmhat}{\hat{c}_m}
\newcommand{\chat}{\hat{c}}
\newcommand{\tauint}{{\tau_{\textrm{int}}}}
\newcommand{\hattauint}{\hat{\tau}_{\textrm{int}}}
\newcommand{\tauexp}{{\tau_{\textrm{exp}}}}
\newcommand{\stilde}{{\tilde{s}}}
\newcommand{\ttilde}{{\tilde{t}}}

\newcommand{\sumiB}{\sum_{i=0}^{B-1}}
\newcommand{\sumjB}{\sum_{j=0}^{B-1}}
\newcommand{\sumiM}{\sum_{i=0}^{M-1}}
\newcommand{\sumjM}{\sum_{j=0}^{M-1}}
\newcommand{\sumiN}{\sum_{i=0}^{N-1}}
\newcommand{\sumjN}{\sum_{j=0}^{N-1}}

%% ----------------------------------------------------------------
\def\ve{\varepsilon}
\def\veps{\varepsilon}
\def\bbB{\mathbb{B}}
\def\bbE{\mathbb{E}}
\def\bbP{\mathbb{P}}
\def\muhat{\hat{\mu}}
\def\psihat{\hat{\psi}}
\def\fhat{\hat{f}}
\def\ghat{\hat{g}}
\def\Ahat{\hat{A}}
\def\Fhat{\hat{F}}
\def\Hhat{\hat{H}}
\def\What{\hat{W}}
\def\Yhat{\hat{Y}}
\def\Zhat{\hat{Z}}
\def\nuhat{\hat{\nu}}
\def\rhohat{\hat{\rho}}
\def\Xihat{\hat{Xi}}
\def\xbar{\overline{x}}
%\def\torusdiff{\tilde{\vecd}}
\def\torusdiff{\vecd_\Lambda}

\def\muX{\mu_{X}}
\def\muY{\mu_{Y}}
\def\muXNbar{\mu_{\overline{X}_N}}
\def\muYNbar{\mu_{\overline{Y}_N}}
\def\sigmaX{\sigma_{X}}
\def\sigmaY{\sigma_{Y}}
\def\sigmaXNbar{\sigma_{\overline{X}_N}}
\def\sigmaYNbar{\sigma_{\overline{Y}_N}}

\def\ANbar{{\overline{A}_N}}

\def\QMbar{{\overline{Q}_M}}

\def\Xbar{\overline{X}}
\def\XNbar{{\overline{X}_N}}
\def\XMbar{{\overline{X}_M}}
\def\XNBbar{{\overline{X}_{N,B}}}

\def\Ybar{\overline{Y}}
\def\YNbar{\overline{Y}_N}
\def\YNBbar{\overline{Y}_{N,B}}

\def\Z{\mathbb{Z}}

\def\Htilde{\tilde{H}}
\def\Halpha{H^{(\alpha)}}
\def\HP{H_P}
\def\HPzero{H_P^{(0)}}
\def\HPone{H_P^{(1)}}

\def\bfH{\mathbf{H}}
\def\bfx{\mathbf{x}}

\def\bsH{\mathbf{H}}
\def\bsx{\mathbf{x}}

\def\caS{\mathcal{S}}
\def\mcS{\mathcal{S}}

\def\mcF{\mathcal{F}}
\def\mcK{\mathcal{K}}
\def\mcL{\mathcal{L}}
\def\mcH{\mathcal{H}}
\def\mcN{\mathcal{N}}
\def\mcO{\mathcal{O}}

\def\msH{\mathscr{H}}
\newcommand*{\pig}[1]{\langle #1 \rangle}
\newcommand*{\pigm}[1]{\langle #1 \rangle_M}

%% ----------------------------------------------------------------
\newcommand{\Sn}{\mathcal{S}_n}
\newcommand{\SN}{\mathcal{S}_N}
\newcommand{\SNp}{\mathcal{S}_{N+1}}
\newcommand{\SNpc}{{\SNp \setminus \SN}}
\newcommand{\dd}{\mathrm{d}}
\newcommand{\e}{\mathrm{e}}
\newcommand{\Var}{\mathrm{Var}}
\newcommand{\Corr}{\mathrm{Corr}}
\newcommand{\Cov}{\mathrm{Cov}}

%% ----------------------------------------------------------------
\def\veca{\mathbf{a}}
\def\vecb{\mathbf{b}}
\def\vecc{\mathbf{c}}
\def\vecd{\mathbf{d}}
\def\vecg{\mathbf{g}}
\def\veck{\mathbf{k}}
\def\vecm{\mathbf{m}}
\def\vecn{\mathbf{n}}
\def\vecr{\mathbf{r}}
\def\vecu{\mathbf{u}}
\def\vecv{\mathbf{v}}
\def\vecw{\mathbf{w}}
\def\vecx{\mathbf{x}}
\def\vecy{\mathbf{y}}
\def\vecz{\mathbf{z}}

\def\vecK{\mathbf{K}}
\def\vecM{\mathbf{M}}
\def\vecP{\mathbf{P}}
%\def\vecP{\mathcal{P}}
\def\vecV{\mathbf{V}}
\def\vecW{\mathbf{W}}
\def\vecWhat{\hat{\mathbf{W}}}
\def\vecX{\mathbf{X}}
\def\vecY{\mathbf{Y}}
\def\vecZ{\mathbf{Z}}

\def\vecPpiz{\vecP^{(\pi_0)}}
\def\Ppiz{P^{(\pi_0)}}
\def\P{P_{\mathrm{Gibbs}}}
\def\Phat{\hat{P}_{\mathrm{Gibbs}}}

%\def\mkvM{\mathbf{M}}
%\def\mkvM{R}
\def\mkvM{A}
%\def\mkvM{\mathcal{M}}

\newcommand{\vecomega}{{\boldsymbol{\omega}}}
\newcommand{\vecmu}{{\boldsymbol{\mu}}}
\newcommand{\vecnu}{{\boldsymbol{\nu}}}

\def\vecxi{\mathbf{x}_{i}}
\def\vecxj{\mathbf{x}_{j}}
\def\vecxpii{\mathbf{x}_{\pi(i)}}
\def\vecxpij{\mathbf{x}_{\pi(j)}}
\def\vecxpik{\mathbf{x}_{\pi(k)}}
\def\veckpii{\mathbf{k}_{\pi(i)}}

\def\pii{\pi^{-1}}
\def\piinv{\pi^{-1}}

\def\pix{\pi(\vecx)}
\def\piy{\pi(\vecy)}

\def\piprimex{\pi'(\vecx)}
\def\piprimey{\pi'(\vecy)}

\def\piv{\pi(\vecv)}
\def\piw{\pi(w)}
\def\piiw{\pi^{-1}(w)}
\def\piix{\pi^{-1}(\vecx)}
\def\piiy{\pi^{-1}(\vecy)}
\def\edh{e^{-\Delta H}}

\def\vecwi{\mathbf{w}^{(i)}}
\def\vecwj{\mathbf{w}^{(j)}}
\def\vecwk{\mathbf{w}^{(k)}}
\def\vecwij{\mathbf{w}^{(ij)}}

\def\vecwil{\mathbf{w}^{(i_\ell)}}
\def\vecwjl{\mathbf{w}^{(j_\ell)}}

\def\xhat{\hat{x}}
\def\yhat{\hat{y}}

\DeclareMathOperator*{\ctdto}{\circ\hspace{-0.2mm}--\hspace{-0.3mm}\circ}
\DeclareMathOperator*{\notctdto}{\circ\hspace{-0.2mm}--\hspace{-2.5mm}\not--\hspace{-0.3mm}\circ}
\def\maybeeq{\stackrel{?}{=}}
\DeclareMathOperator*{\twocyc}{\circ\hspace{-0.2mm}-\pi-\hspace{-0.4mm}\circ}
\DeclareMathOperator*{\ntwocyc}{\circ\hspace{-0.2mm}-\not\pi-\hspace{-0.4mm}\circ}


%% ----------------------------------------------------------------
\newcommand{\tand}{\textrm{and}}
\newcommand{\qand}{\quad\textrm{and}\quad}
\newcommand{\qqand}{\qquad\textrm{and}\qquad}
\newcommand{\qor}{\quad\textrm{or}\quad}
\newcommand{\qqor}{\qquad\textrm{or}\qquad}
\newcommand{\qie}{\quad\textrm{i.e.}\quad}
\newcommand{\qqie}{\qquad\textrm{i.e.}\qquad}
\newcommand{\qqwith}{\qquad\textrm{with}\qquad}

%% ================================================================
%\newcommand{\Suto}{S\"ut\H{o}}
\def\Suto{S\"ut\H{o}}

\newcommand{\grad}{\nabla}
\newcommand{\tensor}{\otimes}
\newcommand{\into}{\hookrightarrow}
\newcommand{\longto}{\longrightarrow}
\def\upto{\nearrow}
\newcommand{\ix}{\pi(x)}
\newcommand{\iy}{\pi^{-1}(y)}
\newcommand{\iu}{\pi(u)}
\newcommand{\tat}{\textasciitilde}

\newcommand*{\boxalign}[1]{
	\begin{equation*}
	\addtolength{\fboxsep}{5pt}
	\boxed{
	\begin{aligned}
	#1
	\end{aligned}
	}
	\end{equation*}
}

\newcommand*{\rowvectwo}[2]{\begin{pmatrix}#1 & #2 \end{pmatrix}}
\newcommand*{\rowvecthree}[3]{\begin{pmatrix}#1 & #2 & #3\end{pmatrix}}

\newcommand*{\colvecone}[1]{\left(\begin{array}{r} #1 \end{array}\right)}
\newcommand*{\colvectwo}[2]{\left(\begin{array}{r} #1 \\ #2 \end{array}\right)}
\newcommand*{\colvecthree}[3]{\left(\begin{array}{r} #1 \\ #2 \\ #3\end{array}\right)}
\newcommand*{\colvecfour}[4]{\left(\begin{array}{r} #1 \\ #2 \\ #3 \\ #4\end{array}\right)}

\newcommand*{\collvecone}[1]{\left(\begin{array}{l} #1 \end{array}\right)}
\newcommand*{\collvectwo}[2]{\left(\begin{array}{l} #1 \\ #2 \end{array}\right)}
\newcommand*{\collvecthree}[3]{\left(\begin{array}{l} #1 \\ #2 \\ #3\end{array}\right)}
\newcommand*{\collvecfour}[4]{\left(\begin{array}{l} #1 \\ #2 \\ #3 \\ #4\end{array}\right)}

\newcommand*{\colcvecone}[1]{\left(\begin{array}{c} #1 \end{array}\right)}
\newcommand*{\colcvectwo}[2]{\left(\begin{array}{c} #1 \\ #2 \end{array}\right)}
\newcommand*{\colcvecthree}[3]{\left(\begin{array}{c} #1 \\ #2 \\ #3\end{array}\right)}
\newcommand*{\colcvecfour}[4]{\left(\begin{array}{c} #1 \\ #2 \\ #3 \\ #4\end{array}\right)}

\newcommand*{\colrvecone}[1]{\left(\begin{array}{r} #1 \end{array}\right)}
\newcommand*{\colrvectwo}[2]{\left(\begin{array}{r} #1 \\ #2 \end{array}\right)}
\newcommand*{\colrvecthree}[3]{\left(\begin{array}{r} #1 \\ #2 \\ #3\end{array}\right)}
\newcommand*{\colrvecfour}[4]{\left(\begin{array}{r} #1 \\ #2 \\ #3 \\ #4\end{array}\right)}

%% ----------------------------------------------------------------
\newcommand{\D}{\partial}
\newcommand{\DA}{\partial A}
\newcommand{\DB}{\partial B}
\newcommand{\DC}{\partial C}
\newcommand{\DX}{\partial X}
\newcommand{\Dc}{\partial c}
\newcommand{\Df}{\partial f}
\newcommand{\Dg}{\partial g}
\newcommand{\DG}{\partial G}
\newcommand{\Dh}{\partial h}
\newcommand{\DM}{\partial M}
\newcommand{\Dr}{\partial r}
\newcommand{\Du}{\partial u}
\newcommand{\Dx}{\partial x}
\newcommand{\Dy}{\partial y}
\newcommand{\Dz}{\partial z}
\newcommand{\Ds}{\partial s}
\newcommand{\Dt}{\partial t}

\newcommand{\DD}{\partial/\partial}
\newcommand{\DDA}{\partial/\partial A}
\newcommand{\DDB}{\partial/\partial B}
\newcommand{\DDC}{\partial/\partial C}
\newcommand{\DDX}{\partial/\partial X}
\newcommand{\DDc}{\partial/\partial c}
\newcommand{\DDf}{\partial/\partial f}
\newcommand{\DDg}{\partial/\partial g}
\newcommand{\DDG}{\partial/\partial G}
\newcommand{\DDh}{\partial/\partial h}
\newcommand{\DDM}{\partial/\partial M}
\newcommand{\DDr}{\partial/\partial r}
\newcommand{\DDx}{\partial/\partial x}
\newcommand{\DDy}{\partial/\partial y}
\newcommand{\DDz}{\partial/\partial z}
\newcommand{\DDs}{\partial/\partial s}
\newcommand{\DDt}{\partial/\partial t}

%% ----------------------------------------------------------------
\newcommand*{\slashD}[1]{\partial/\partial #1}
\newcommand*{\fracD}[1]{\frac{\partial}{\partial #1}}
\newcommand*{\slashDtwo}[2]{\partial #1/\partial #2}
\newcommand*{\fracDtwo}[2]{\frac{\partial #1}{\partial #2}}

\newcommand{\slashDx}{\partial/\partial x}
\newcommand{\slashDy}{\partial/\partial y}
\newcommand{\slashDz}{\partial/\partial z}

\newcommand{\fracDs}{\frac{\partial}{\partial s}}
\newcommand{\fracDt}{\frac{\partial}{\partial t}}
\newcommand{\fracDx}{\frac{\partial}{\partial x}}
\newcommand{\fracDy}{\frac{\partial}{\partial y}}
\newcommand{\fracDz}{\frac{\partial}{\partial z}}
\newcommand{\fracDxx}{\frac{\partial^2}{\partial x^2}}

\newcommand{\fracDfx}{\frac{\partial f}{\partial x}}
\newcommand{\fracDfy}{\frac{\partial f}{\partial y}}
\newcommand{\fracDfz}{\frac{\partial f}{\partial z}}

\newcommand{\fracDgt}{\frac{\partial g}{\partial t}}
\newcommand{\fracDgu}{\frac{\partial g}{\partial u}}
\newcommand{\fracDguu}{\frac{\partial^2 g}{\partial u^2}}
\newcommand{\fracDgv}{\frac{\partial g}{\partial v}}
\newcommand{\fracDgvv}{\frac{\partial^2 g}{\partial v^2}}
\newcommand{\fracDguv}{\frac{\partial^2 g}{\partial u \partial v}}

\newcommand{\fracDht}{\frac{\partial h}{\partial t}}
\newcommand{\fracDhu}{\frac{\partial h}{\partial u}}
\newcommand{\fracDhuu}{\frac{\partial^2 h}{\partial u^2}}
\newcommand{\fracDhv}{\frac{\partial h}{\partial v}}
\newcommand{\fracDhvv}{\frac{\partial^2 h}{\partial v^2}}
\newcommand{\fracDhuv}{\frac{\partial^2 h}{\partial u \partial v}}

\newcommand{\fracDgx}{\frac{\partial g}{\partial x}}
\newcommand{\fracDgxx}{\frac{\partial^2 g}{\partial x^2}}
\newcommand{\fracDgy}{\frac{\partial g}{\partial y}}
\newcommand{\fracDgyy}{\frac{\partial^2 g}{\partial y^2}}
\newcommand{\fracDgz}{\frac{\partial g}{\partial z}}
\newcommand{\fracDgxy}{\frac{\partial^2 g}{\partial x \partial y}}

\newcommand{\fracDhx}{\frac{\partial h}{\partial x}}
\newcommand{\fracDhxx}{\frac{\partial^2 h}{\partial x^2}}
\newcommand{\fracDhy}{\frac{\partial h}{\partial y}}
\newcommand{\fracDhyy}{\frac{\partial^2 h}{\partial y^2}}
\newcommand{\fracDhz}{\frac{\partial h}{\partial z}}
\newcommand{\fracDhxy}{\frac{\partial^2 h}{\partial x \partial y}}

\newcommand{\fracDphis}{\frac{\partial    \phi}{\partial s}}
\newcommand{\fracDphit}{\frac{\partial    \phi}{\partial t}}
\newcommand{\fracDphix}{\frac{\partial    \phi}{\partial x}}
\newcommand{\fracDphixx}{\frac{\partial^2 \phi}{\partial x^2}}
\newcommand{\fracDphiy}{\frac{\partial    \phi}{\partial y}}
\newcommand{\fracDphiyy}{\frac{\partial^2 \phi}{\partial y^2}}
\newcommand{\fracDphiz}{\frac{\partial    \phi}{\partial z}}
\newcommand{\fracDphixy}{\frac{\partial^2 \phi}{\partial x \partial y}}

\newcommand{\fracDxDy}{\frac{\partial x}{\partial y}}
\newcommand{\fracDxDz}{\frac{\partial x}{\partial z}}
\newcommand{\fracDyDx}{\frac{\partial y}{\partial x}}
\newcommand{\fracDyDz}{\frac{\partial y}{\partial z}}
\newcommand{\fracDzDx}{\frac{\partial z}{\partial x}}
\newcommand{\fracDzDy}{\frac{\partial z}{\partial y}}

\newcommand{\fracDfDx}{\frac{\partial f}{\partial x}}
\newcommand{\fracDfDy}{\frac{\partial f}{\partial y}}
\newcommand{\fracDfDz}{\frac{\partial f}{\partial z}}

\newcommand{\slashDxDy}{\partial x/\partial y}
\newcommand{\slashDxDz}{\partial x/\partial z}
\newcommand{\slashDyDx}{\partial y/\partial x}
\newcommand{\slashDyDz}{\partial y/\partial z}
\newcommand{\slashDzDx}{\partial z/\partial x}
\newcommand{\slashDzDy}{\partial z/\partial y}

\newcommand{\slashDfDx}{\partial f/\partial x}
\newcommand{\slashDfDy}{\partial f/\partial y}
\newcommand{\slashDfDz}{\partial f/\partial z}

%% ----------------------------------------------------------------
% Parenthesized matrix with left alignment.
\newcommand*{\plmatrix}[1]{
	\left(\begin{array}{llllllllllll}
		#1
	\end{array}\right)
}

% Parenthesized matrix with centered alignment.
\newcommand*{\pcmatrix}[1]{
	\left(\begin{array}{cccccccccccc}
		#1
	\end{array}\right)
}

% Parenthesized matrix with right alignment.
\newcommand*{\prmatrix}[1]{
	\left(\begin{array}{rrrrrrrrrrrr}
		#1
	\end{array}\right)
}

%% ----------------------------------------------------------------
% Bracketed matrix with left alignment.
\newcommand*{\blmatrix}[1]{
	\left[\begin{array}{llllllllllll}
		#1
	\end{array}\right]
}

% Bracketed matrix with centered alignment.
\newcommand*{\bcmatrix}[1]{
	\left[\begin{array}{cccccccccccc}
		#1
	\end{array}\right]
}

% Bracketed matrix with right alignment.
\newcommand*{\brmatrix}[1]{
	\left[\begin{array}{rrrrrrrrrrrr}
		#1
	\end{array}\right]
}

%% ----------------------------------------------------------------
% Unbracketed matrix with left alignment.
\newcommand*{\nlmatrix}[1]{
	\begin{array}{llllllllllll}
		#1
	\end{array}
}

% Unbracketed matrix with centered alignment.
\newcommand*{\ncmatrix}[1]{
	\begin{array}{cccccccccccc}
		#1
	\end{array}
}

% Unbracketed matrix with right alignment.
\newcommand*{\nrmatrix}[1]{
	\begin{array}{rrrrrrrrrrrr}
		#1
	\end{array}
}

MLdissertation.bbl
\begin{thebibliography}{DKLP02}

\bibitem[BMD07]{bombin2007homological}
H.~Bombin and MA~Martin-Delgado.
\newblock Homological error correction: classical and quantum codes.
\newblock {\em Journal of mathematical physics}, 48(5):052105--052105, 2007.

\bibitem[BPT10]{bravyi2010tradeoffs}
S.~Bravyi, D.~Poulin, and B.~Terhal.
\newblock Tradeoffs for reliable quantum information storage in 2d systems.
\newblock {\em Physical review letters}, 104(5):50503, 2010.

\bibitem[CDZ11]{couvreur2011construction}
A.~Couvreur, N.~Delfosse, and G.~Z{\'e}mor.
\newblock A construction of quantum ldpc codes from cayley graphs.
\newblock In {\em Information Theory Proceedings (ISIT), 2011 IEEE
  International Symposium on}, pages 643--647. IEEE, 2011.

\bibitem[CM92]{cori1992maps}
R.~Cori and A.~Machi.
\newblock Maps, hypermaps and their automorphisms: a survey i, ii, iii.
\newblock {\em Exposition. Math}, 10(5):403--427, 1992.

\bibitem[CP80]{cori1980complexity}
R.~Cori and J.G. Penaud.
\newblock The complexity of a planar hypermap and that of its dual.
\newblock {\em Annals of Discrete Mathematics}, 9:53--62, 1980.

\bibitem[CS96]{calderbank1996good}
A.R. Calderbank and P.W. Shor.
\newblock Good quantum error-correcting codes exist.
\newblock {\em Physical Review A}, 54(2):1098, 1996.

\bibitem[DCP10]{duclos2010fast}
G.~Duclos-Cianci and D.~Poulin.
\newblock Fast decoders for topological quantum codes.
\newblock {\em Physical review letters}, 104(5):50504, 2010.

\bibitem[DKLP02]{dennis2002topological}
E.~Dennis, A.~Kitaev, A.~Landahl, and J.~Preskill.
\newblock Topological quantum memory.
\newblock {\em Journal of Mathematical Physics}, 43:4452, 2002.

\bibitem[Fet11]{fetaya2011homological}
E.~Fetaya.
\newblock Homological error correcting codes and systolic geometry.
\newblock {\em Arxiv preprint arXiv:1108.2886}, 2011.

\bibitem[FML02]{freedman2002z2}
M.H. Freedman, D.A. Meyer, and F.~Luo.
\newblock Z2-systolic freedom and quantum codes.
\newblock {\em Mathematics of quantum computation, Chapman \& Hall/CRC}, pages
  287--320, 2002.

\bibitem[Gal62]{gallager1962low}
Robert Gallager.
\newblock Low-density parity-check codes.
\newblock {\em Information Theory, IRE Transactions on}, 8(1):21--28, 1962.

\bibitem[GKN03]{gagarin2003embeddings}
A.~Gagarin, W.~Kocay, and D.~Neilson.
\newblock Embeddings of small graphs on the torus.
\newblock {\em Cubo. v5}, pages 351--371, 2003.

\bibitem[Got97]{gottesman1997stabilizer}
D.~Gottesman.
\newblock Stabilizer codes and quantum error correction.
\newblock {\em Arxiv preprint quant-ph/9705052}, 1997.

\bibitem[Gur10]{guruswami2010lecture}
V.~Guruswami.
\newblock Course notes for introduction to coding theory.
\newblock {\em Carnegie Mellon University}, 2010.

\bibitem[Hat02]{hatcheralgebraic}
Allen Hatcher.
\newblock {\em Algebraic topology}.
\newblock Cambridge University Press, 2002.

\bibitem[HEO05]{holt2005handbook}
Derek~F Holt, Bettina Eick, and Eamonn~A O'Brien.
\newblock {\em Handbook of computational group theory}, volume~24.
\newblock Chapman and Hall/CRC, 2005.

\bibitem[Kit03]{kitaev2003fault}
A.Y. Kitaev.
\newblock Fault-tolerant quantum computation by anyons.
\newblock {\em Annals of Physics}, 303(1):2--30, 2003.

\bibitem[KP12]{kovalev2012improved}
A.A. Kovalev and L.P. Pryadko.
\newblock Improved quantum hypergraph-product ldpc codes.
\newblock {\em Arxiv preprint arXiv:1202.0928}, 2012.

\bibitem[LZZ04]{lando2004graphs}
S.K. Lando, A.K. Zvonkin, and D.B. Zagier.
\newblock {\em Graphs on surfaces and their applications}, volume 141.
\newblock Springer Verlag, 2004.

\bibitem[Mac03]{mackay2003information}
D.J.C. MacKay.
\newblock {\em Information theory, inference, and learning algorithms}.
\newblock Cambridge Univ Pr, 2003.

\bibitem[Maz11]{mazoit2011tree}
F.~Mazoit.
\newblock Tree-width of hypergraphs and surface duality.
\newblock {\em Journal of Combinatorial Theory, Series B}, 2011.

\bibitem[MMM04]{mackay2004sparse}
D.J.C. MacKay, G.~Mitchison, and P.L. McFadden.
\newblock Sparse-graph codes for quantum error correction.
\newblock {\em Information Theory, IEEE Transactions on}, 50(10):2315--2330,
  2004.

\bibitem[NC10]{nielsenquantum}
Michael~A Nielsen and Isaac~L Chuang.
\newblock {\em Quantum computation and quantum information}.
\newblock Cambridge university press, 2010.

\bibitem[RU08]{richardson2008modern}
T.J. Richardson and R.L. Urbanke.
\newblock {\em Modern coding theory}.
\newblock Cambridge Univ Pr, 2008.

\bibitem[SB12]{sarvepalli2012topological}
P.~Sarvepalli and K.R. Brown.
\newblock Topological subsystem codes from graphs and hypergraphs.
\newblock {\em arXiv preprint arXiv:1207.0479}, 2012.

\bibitem[TZ09]{tillich2009quantum}
J.P. Tillich and G.~Z{\'e}mor.
\newblock Quantum ldpc codes with positive rate and minimum distance
  proportional to $n^{1/2}$.
\newblock In {\em Information Theory, 2009. ISIT 2009. IEEE International
  Symposium on}, pages 799--803. IEEE, 2009.

\bibitem[Wal75]{walsh1975hypermaps}
TRS Walsh.
\newblock Hypermaps versus bipartite maps.
\newblock {\em Journal of Combinatorial Theory, Series B}, 18(2):155--163,
  1975.

\bibitem[Z{\'e}m09]{zemor2009cayley}
G.~Z{\'e}mor.
\newblock On cayley graphs, surface codes, and the limits of homological coding
  for quantum error correction.
\newblock {\em Coding and Cryptology}, pages 259--273, 2009.

\end{thebibliography}
