module type S = `sig`

.. `end`

type

graph

val divisors : `int -> graph`

`divisors n`

builds the graph of divisors.
Vertices are integers from `2`

to `n`

. `i`

is connected to `j`

if
and only if `i`

divides `j`

.

**Raises** `Invalid_argument`

is `n < 2`

.

val de_bruijn : `int -> graph`

`de_bruijn n`

builds the de Bruijn graph of order `n`

.
Vertices are bit sequences of length `n`

(encoded as their
interpretation as binary integers). The sequence `xw`

is connected
to the sequence `wy`

for any bits `x`

and `y`

and any bit sequence
`w`

of length `n-1`

.

**Raises** `Invalid_argument`

is `n < 1`

or `n > Sys.word_size-1`

.

val vertex_only : `int -> graph`

`vertex_only n`

builds a graph with `n`

vertices and no edge.

val full : `?self:bool -> int -> graph`

`full n`

builds a graph with `n`

vertices and all possible edges.
The optional argument `self`

indicates if loop edges should be added
(default value is `true`

).