diff --git a/doc/2023_09_18_presentation.qmd b/doc/2023_09_18_presentation.qmd
new file mode 100644
index 0000000000000000000000000000000000000000..fca8e36d335815fdaf295efd806aaf28364fd209
--- /dev/null
+++ b/doc/2023_09_18_presentation.qmd
@@ -0,0 +1,375 @@
+---
+title: "Kmer diff"
+author: "laurent modolo"
+format: 
+    revealjs:
+        transition: none
+        format:
+        highlight-style: monokai
+        theme: white
+        footer: "laurent.modolo@ens-lyon.fr"
+        slide-number: c/t
+        fontsize: 22pt
+revealjs-plugins:
+  - pointer
+---
+
+## Background
+
+The Delattre team’s studies, *Mesorhabditis worms*, some species of which present
+atypical reproduction mechanisms. 
+
+In a previous paper: *Males as somatic investment in a parthenogenetic nematode* [DOI: 10.1126/science.aau0099](https://doi.org/10.1126/science.aau0099),
+we characterized contigs of a *de novo* genome assembly of *M. belaris* as
+
+
+:::: {.columns}
+::: {.column width="40%"}
+- <span style="color:blue;">Autosomal</span> chromosomes
+- <span style="color:red;">X</span> chromosome
+- <span style="color:green;">Y</span> chromosome
+:::
+
+::: {.column width="60%"}
+![](./img/science_figure.png){width=350px}
+:::
+
+::::
+
+## Goal
+
+From raw sequencing data of male and female individuals, we want to identify $k$-mers corresponding to :
+
+- <span style="color:blue;">Autosomal</span> chromosomes
+- <span style="color:red;">X</span> chromosome, if present
+- <span style="color:green;">Y</span> chromosome, if present
+
+<div style="text-align: center">**We can study the chromosomal system without an assembly**</div>
+
+## Phylogeny
+
+![](./img/phylogeny.png)
+
+## Kmer-diff
+
+A nextflow pipeline to analyze the $k$-mer content of fastq files
+
+1. preprocess the fastq files
+2. count the $k$-mers of each file
+3. merge the counts to get a table of male and female $k$-mers counts
+3. test the sexual models
+4. identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers
+
+## Kmer-diff
+
+![](./img/flowchart.png)
+
+## Preprocessing
+
+**preprocess the fastq files**
+
+Important for the clustering analysis:
+
+- subsample to have the same number of reads between male and female
+
+Important for the $k$-mer counting
+
+- split the fastq files into manageable size files ($10ˆ6$ reads per files)
+
+## $k$-mer count
+
+[fastqkmer](https://github.com/angelovangel/fastkmers)
+
+```
+fastkmers -k 12 file.fastq > file.csv
+```
+
+Run a **sliding window** of size $12$ by step of $1$ along the reads counting all the occurrences of each $k$-mers
+
+We have the letters: $A,C,T,G$ and $N$
+
+<div style="text-align: center">$244,140,625$ possible $k$-mers</div>
+
+We split the fastq files into $\sim$ $1400$ subfiles of $10^6$ reads.
+
+## Merging the $k$-mers
+
+$\sim$ $1400$ splits of $10^6$ reads $\rightarrow$ $1400$ csv files
+
+:::: {.columns}
+::: {.column width="50%"}
+
+- large number of $k$-mers
+- Unordered
+- not the same $k$-mers a present in every files
+
+[mergekmer](https://gitbio.ens-lyon.fr/LBMC/Delattre/mergekmer) a small rust program that builds a **suffix tree** of the $k$-mer
+:::
+
+::: {.column width="50%"}
+
+![](./img/sufixtree_a.png)
+
+:::
+::::
+
+## Merging the $k$-mers
+
+[mergekmer](https://gitbio.ens-lyon.fr/LBMC/Delattre/mergekmer) a small rust program that build a **suffix tree** of the $k$-mer
+
+:::: {.columns}
+::: {.column width="50%"}
+
+```
+merge fastkmers output
+
+Usage: mergekmer [OPTIONS] --output <OUTPUT>
+
+Options:
+  -c, --csv <CSV>...     list of csv files
+  -o, --output <OUTPUT>  merged csv file
+  -c, --collate          collate csv file
+  -h, --help             Print help
+  -V, --version          Print version
+```
+
+Each leaf of the tree contains the number of $k$-mers
+
+The tree traversal is easy to compute with a recursive function
+
+**we can merge the counts of a given sex for each specie**
+
+:::
+::: {.column width="50%"}
+![](./img/sufixtree_b.png)
+:::
+::::
+
+## Merging the $k$-mers
+
+:::: {.columns}
+::: {.column width="50%"}
+
+```
+merge fastkmers output
+
+Usage: mergekmer [OPTIONS] --output <OUTPUT>
+
+Options:
+  -c, --csv <CSV>...     list of csv files
+  -o, --output <OUTPUT>  merged csv file
+  -c, --collate          collate csv file
+  -h, --help             Print help
+  -V, --version          Print version
+```
+
+In the `--collate` version each leave contains a list of the count of the $k$-mers in the female or the male of a specie.
+
+**we can fuse the counts of the male and female for each specie**
+
+
+:::
+::: {.column width="50%"}
+![](./img/sufixtree_c.png)
+:::
+::::
+
+## Test the sexual model
+
+**We have the following possible models**
+
+
+:::: {.columns}
+::: {.column width="33%"}
+
+- <span style="color:red;">X</span><span style="color:green;">Y</span> system
+
+![](./img/model_XY.png)
+    
+:::
+::: {.column width="33%"}
+
+- <span style="color:red;">X</span>O system
+
+![](./img/model_XO.png)
+:::
+::: {.column width="33%"}
+
+- OO system
+
+![](./img/model_OO.png)
+
+:::
+::::
+
+## Test the sexual model
+
+:::: {.columns}
+::: {.column width="33%"}
+
+- <span style="color:red;">X</span><span style="color:green;">Y</span> system
+
+![](./img/clustering_XY_naive.png)
+
+:::
+::: {.column width="33%"}
+
+- <span style="color:red;">X</span>O system
+
+![](./img/clustering_XO_naive.png)
+:::
+::: {.column width="33%"}
+
+- OO system
+
+![](./img/clustering_OO_naive.png)
+
+:::
+::::
+
+- A cluster with mean male $=$ mean female
+- A cluster above the diagonal
+- A cluster below the diagonal
+
+
+## Test the sexual model
+
+:::: {.columns}
+::: {.column width="25%"}
+
+**data**
+
+![](./img/model_XY.png)
+
+:::
+::: {.column width="25%"}
+
+**XY model**
+
+![](./img/clustering_XY_naive_XY.png)
+
+:::
+::: {.column width="25%"}
+
+**XO model**
+
+![](./img/clustering_XY_naive_XO.png)
+:::
+::: {.column width="25%"}
+
+**OO model**
+
+![](./img/clustering_XY_naive_OO.png)
+
+:::
+::::
+:::: {.columns}
+::: {.column width="50%"}
+
+
+Bayesian information criterion (BIC)
+
+![](./img/clustering_XY_naive_BIC.png)
+
+:::
+::: {.column width="50%"}
+
+Loglikelihood
+
+![](./img/clustering_XY_naive_loglik.png)
+
+:::
+::::
+
+
+## identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers
+
+:::: {.columns}
+::: {.column width="50%"}
+
+![](./img/clustering_XY_naive_XY.png)
+
+:::
+::: {.column width="50%"}
+
+- Can be used to compare model
+- Not sensitive enough
+- Cannot be used to classify individual $k$-mers
+
+:::
+::::
+
+## identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers
+
+
+:::: {.columns}
+::: {.column width="75%"}
+![](./img/clustering_XY_bayse_XY.png)
+
+:::
+::: {.column width="25%"}
+
+- Can choose the prior for each cluster (mean and shape)
+- Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span>
+- Can choose the weight of each prior compared to the data
+
+:::
+::::
+
+## identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers
+
+
+:::: {.columns}
+::: {.column width="75%"}
+![](./img/clustering_XY_bayse_XO.png)
+
+:::
+::: {.column width="25%"}
+
+- Can choose the prior for each cluster (mean and shape)
+- Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span>
+- Can choose the weight of each prior compared to the data
+
+:::
+::::
+
+## identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers
+
+:::: {.columns}
+::: {.column width="75%"}
+![](./img/clustering_XO_bayse_XO.png)
+
+:::
+::: {.column width="25%"}
+
+- Can choose the prior for each cluster (mean and shape)
+- Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span>
+- Can choose the weight of each prior compared to the data
+
+:::
+::::
+
+## Count problem
+
+:::: {.columns}
+::: {.column width="75%"}
+![](./img/count_problem.png)
+
+:::
+::: {.column width="25%"}
+
+- The coverage is not the same between the male and the female
+
+:::
+::::
+
+## Kmer-diff
+
+A nextflow pipeline to analyze the $k$-mer content of fastq files
+
+1. preprocess the fastq files
+    - **subsample to have the same number of reads between male and female**
+2. count the $k$-mers of each file
+3. merge the counts to get a table of male and female $k$-mers counts
+3. test the sexual models
+4. identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers
\ No newline at end of file
diff --git a/doc/_extensions/quarto-ext/pointer/_extension.yml b/doc/_extensions/quarto-ext/pointer/_extension.yml
new file mode 100644
index 0000000000000000000000000000000000000000..13b9df4b0b1a0081699570c307a344f9bf3928cf
--- /dev/null
+++ b/doc/_extensions/quarto-ext/pointer/_extension.yml
@@ -0,0 +1,15 @@
+title: Pointer
+author: Posit Software, PBC
+version: 0.1.0
+quarto-required: ">=1.2.198"
+contributes:
+  revealjs-plugins:
+    - name: RevealPointer
+      script: pointer.js
+      stylesheet: pointer.css
+      config:
+        pointer:
+          key: "q"
+          color: "red"
+          pointerSize: 16
+          alwaysVisible: false
diff --git a/doc/_extensions/quarto-ext/pointer/pointer.css b/doc/_extensions/quarto-ext/pointer/pointer.css
new file mode 100644
index 0000000000000000000000000000000000000000..bd55511d3e8818ab73df95647480bb862b04ca63
--- /dev/null
+++ b/doc/_extensions/quarto-ext/pointer/pointer.css
@@ -0,0 +1 @@
+.cursor-dot,.cursor-dot-outline{pointer-events:none;position:absolute;top:0;left:0;border-radius:50%;opacity:0;transform:translate(-50%,-50%);transition:opacity 0.3s ease-in-out,transform 0.3s ease-in-out;}.cursor-dot{width:12px;height:12px;background-color:red;z-index:99;}.no-cursor{cursor:none;}.no-cursor a,.no-cursor div,.no-cursor span{cursor:none;}
diff --git a/doc/_extensions/quarto-ext/pointer/pointer.js b/doc/_extensions/quarto-ext/pointer/pointer.js
new file mode 100644
index 0000000000000000000000000000000000000000..381a85777816d5ceceb90e386fc8133bde32a601
--- /dev/null
+++ b/doc/_extensions/quarto-ext/pointer/pointer.js
@@ -0,0 +1 @@
+var RevealPointer=function(){"use strict";var e={backspace:8,tab:9,enter:13,shift:16,ctrl:17,alt:18,pausebreak:19,capslock:20,esc:27,space:32,pageup:33,pagedown:34,end:35,home:36,leftarrow:37,uparrow:38,rightarrow:39,downarrow:40,insert:45,delete:46,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,a:65,b:66,c:67,d:68,e:69,f:70,g:71,h:72,i:73,j:74,k:75,l:76,m:77,n:78,o:79,p:80,q:81,r:82,s:83,t:84,u:85,v:86,w:87,x:88,y:89,z:90,leftwindowkey:91,rightwindowkey:92,selectkey:93,numpad0:96,numpad1:97,numpad2:98,numpad3:99,numpad4:100,numpad5:101,numpad6:102,numpad7:103,numpad8:104,numpad9:105,multiply:106,add:107,subtract:109,decimalpoint:110,divide:111,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123,numlock:144,scrolllock:145,semicolon:186,equalsign:187,comma:188,dash:189,period:190,forwardslash:191,graveaccent:192,openbracket:219,backslash:220,closebracket:221,singlequote:222};return function(){var t={},o=!1,a=null,n={x:0,y:0,isVisible:!1},i={x:0,y:0,scale:1};function l(o){var a;null==(t=o.pointer||{}).key?t.key="q":t.key=t.key.toLowerCase(),null!=t.pointerSize&&"number"==typeof t.pointerSize||(t.pointerSize=12),null!=t.tailLength&&"number"==typeof t.tailLength||(t.tailLength=10),null!=t.color&&"string"==typeof t.color||(t.color="red"),null!=t.alwaysVisible&&"boolean"==typeof t.alwaysVisible||(t.alwaysVisible=!1),t.keyCode=(a=t.key,e[a])}function s(){a.style.top="".concat((n.y-i.y)/i.scale,"px"),a.style.left="".concat((n.x-i.x)/i.scale,"px"),n.isVisible?a.style.opacity="0.8":a.style.opacity="0",1!==i.scale?(a.style.width="".concat(t.pointerSize/i.scale,"px"),a.style.height="".concat(t.pointerSize/i.scale,"px")):(a.style.width="".concat(t.pointerSize,"px"),a.style.height="".concat(t.pointerSize,"px"))}function c(e){n.x=e.pageX,n.y=e.pageY;var t=document.body.style.transform;""!==t?(i.x=Number.parseInt(/translate\((.*)px,/gm.exec(t)[1]),i.y=Number.parseInt(/px,\s(.*)px\)/gm.exec(t)[1]),i.scale=Number.parseFloat(/scale\((.)\)/gm.exec(t)[1])):(i.x=0,i.y=0,i.scale=1),requestAnimationFrame(s)}function r(){(o=!o)?(document.addEventListener("mousemove",c),document.body.classList.add("no-cursor"),n.isVisible=!0):(document.removeEventListener("mousemove",c),document.body.classList.remove("no-cursor"),n.isVisible=!1,requestAnimationFrame(s))}return{id:"pointer",init:function(e){var o;l(e.getConfig()),t.alwaysVisible?r():e.addKeyBinding({keyCode:t.keyCode,key:t.key},(function(){r()})),(o=document.createElement("div")).className="cursor-dot",o.style.width="".concat(t.pointerSize,"px"),o.style.height="".concat(t.pointerSize,"px"),o.style.backgroundColor=t.color,t.alwaysVisible&&(o.style.opacity="0.8"),document.body.appendChild(o),a=o}}}}();
diff --git a/doc/img/clustering_OO_bayse_OO.png b/doc/img/clustering_OO_bayse_OO.png
new file mode 100644
index 0000000000000000000000000000000000000000..55ec85f09aacf8ffe81e2226536c501939835a71
Binary files /dev/null and b/doc/img/clustering_OO_bayse_OO.png differ
diff --git a/doc/img/clustering_OO_naive.png b/doc/img/clustering_OO_naive.png
new file mode 100644
index 0000000000000000000000000000000000000000..720c9024571565dcc22935e221f26551e046413e
Binary files /dev/null and b/doc/img/clustering_OO_naive.png differ
diff --git a/doc/img/clustering_XO_bayse_XO.png b/doc/img/clustering_XO_bayse_XO.png
new file mode 100644
index 0000000000000000000000000000000000000000..da2aa6cfa3c4089088b5939cf8b108843f2a8f3c
Binary files /dev/null and b/doc/img/clustering_XO_bayse_XO.png differ
diff --git a/doc/img/clustering_XO_naive.png b/doc/img/clustering_XO_naive.png
new file mode 100644
index 0000000000000000000000000000000000000000..1a04f87caca43d2b00134384d19bbc28f353eb02
Binary files /dev/null and b/doc/img/clustering_XO_naive.png differ
diff --git a/doc/img/clustering_XY_bayse_XO.png b/doc/img/clustering_XY_bayse_XO.png
new file mode 100644
index 0000000000000000000000000000000000000000..0102deca2178eb48e9f9babc2711208ef590a193
Binary files /dev/null and b/doc/img/clustering_XY_bayse_XO.png differ
diff --git a/doc/img/clustering_XY_bayse_XY.png b/doc/img/clustering_XY_bayse_XY.png
new file mode 100644
index 0000000000000000000000000000000000000000..8fe0a85651259dfb6f2b929b6371f53d05c65aae
Binary files /dev/null and b/doc/img/clustering_XY_bayse_XY.png differ
diff --git a/doc/img/clustering_XY_naive.png b/doc/img/clustering_XY_naive.png
new file mode 100644
index 0000000000000000000000000000000000000000..30bb11bd9fdb5ef03b990afbf480bf8c5b212637
Binary files /dev/null and b/doc/img/clustering_XY_naive.png differ
diff --git a/doc/img/clustering_XY_naive_BIC.png b/doc/img/clustering_XY_naive_BIC.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ecaa07dc28b764eb9f8bb8890baa36935c02bba
Binary files /dev/null and b/doc/img/clustering_XY_naive_BIC.png differ
diff --git a/doc/img/clustering_XY_naive_OO.png b/doc/img/clustering_XY_naive_OO.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f2e003fe9523d1beb8ba01e2f2e3629d4b42aea
Binary files /dev/null and b/doc/img/clustering_XY_naive_OO.png differ
diff --git a/doc/img/clustering_XY_naive_XO.png b/doc/img/clustering_XY_naive_XO.png
new file mode 100644
index 0000000000000000000000000000000000000000..096c3ad02907159fc7ca5b9f117f3dca0b1b196e
Binary files /dev/null and b/doc/img/clustering_XY_naive_XO.png differ
diff --git a/doc/img/clustering_XY_naive_XY.png b/doc/img/clustering_XY_naive_XY.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef8d14093a1edacd56dd4630b3241200465c7efb
Binary files /dev/null and b/doc/img/clustering_XY_naive_XY.png differ
diff --git a/doc/img/clustering_XY_naive_loglik.png b/doc/img/clustering_XY_naive_loglik.png
new file mode 100644
index 0000000000000000000000000000000000000000..358e591e59272d34e1b543c981f00a5393899a71
Binary files /dev/null and b/doc/img/clustering_XY_naive_loglik.png differ
diff --git a/doc/img/count_problem.png b/doc/img/count_problem.png
new file mode 100644
index 0000000000000000000000000000000000000000..a269a8ced29c2045b43d50233c3ed81b4359472c
Binary files /dev/null and b/doc/img/count_problem.png differ
diff --git a/doc/img/flowchart.png b/doc/img/flowchart.png
new file mode 100644
index 0000000000000000000000000000000000000000..6c9a8e9912f67f6ad5b930a7cfceeebcdd1481ba
Binary files /dev/null and b/doc/img/flowchart.png differ
diff --git a/doc/img/model_OO.png b/doc/img/model_OO.png
new file mode 100644
index 0000000000000000000000000000000000000000..0239dfaaed4340dfedd02fc6d1ff345bcf74e841
Binary files /dev/null and b/doc/img/model_OO.png differ
diff --git a/doc/img/model_XO.png b/doc/img/model_XO.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c9010c2dece79612407804c33c10c172edfdc25
Binary files /dev/null and b/doc/img/model_XO.png differ
diff --git a/doc/img/model_XY.png b/doc/img/model_XY.png
new file mode 100644
index 0000000000000000000000000000000000000000..e11c4fc6f3a452835586fad6051209c4538efe42
Binary files /dev/null and b/doc/img/model_XY.png differ
diff --git a/doc/img/science_figure.png b/doc/img/science_figure.png
new file mode 100644
index 0000000000000000000000000000000000000000..e62357cbce554275ee161f5ca60eb1bd47a16b2f
Binary files /dev/null and b/doc/img/science_figure.png differ
diff --git a/doc/img/sufixtree.svg b/doc/img/sufixtree.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bb37640fc58997234f9e10d241231dd1d18ebffa
--- /dev/null
+++ b/doc/img/sufixtree.svg
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg1"
+   sodipodi:docname="sufixtree.svg"
+   inkscape:version="1.3 (0e150ed, 2023-07-21)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="0.92737795"
+     inkscape:cx="397.35687"
+     inkscape:cy="561.25984"
+     inkscape:window-width="1392"
+     inkscape:window-height="1212"
+     inkscape:window-x="1821"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1">
+    <rect
+       x="288.98682"
+       y="416.22728"
+       width="354.76367"
+       height="348.29381"
+       id="rect13" />
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g4">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1"
+         sodipodi:type="arc"
+         sodipodi:cx="95.148415"
+         sodipodi:cy="32.239197"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 103.06277,33.406662 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865728 8,8 0 0 1 6.921197,8.905146" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="71.168518"
+         y="51.919418"
+         id="text1"><tspan
+           sodipodi:role="line"
+           id="tspan1"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="71.168518"
+           y="51.919418"><tspan
+   style="fill:#ff0000"
+   id="tspan8">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1"
+         width="53.922192"
+         height="12.553314"
+         x="68.757927"
+         y="40.512966" />
+    </g>
+    <g
+       id="g3">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-1"
+         sodipodi:type="arc"
+         sodipodi:cx="71.902306"
+         sodipodi:cy="71.669632"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 79.816661,72.837097 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865727 8,8 0 0 1 6.921198,8.905145" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.922413"
+         y="91.349846"
+         id="text1-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-8"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="47.922413"
+           y="91.349846"><tspan
+   style="fill:#ff0000"
+   id="tspan9">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-4"
+         width="53.922192"
+         height="12.553314"
+         x="45.511829"
+         y="79.943398" />
+    </g>
+    <g
+       id="g2">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6"
+         sodipodi:type="arc"
+         sodipodi:cx="41.672695"
+         sodipodi:cy="120.75927"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 49.587051,121.92673 a 8,8 0 0 1 -9.032618,6.754 8,8 0 0 1 -6.809991,-8.99048 8,8 0 0 1 8.947982,-6.86572 8,8 0 0 1 6.921198,8.90514" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="17.692799"
+         y="140.4395"
+         id="text1-0"><tspan
+           sodipodi:role="line"
+           id="tspan1-3"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="17.692799"
+           y="140.4395"><tspan
+   style="fill:#ff0000"
+   id="tspan10">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2"
+         width="53.922192"
+         height="12.553314"
+         x="15.282207"
+         y="129.03305" />
+    </g>
+    <g
+       id="g1">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g16">
+      <g
+         id="g2-2"
+         transform="translate(61.679819,-0.13385004)">
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+           id="path1-6-1-9"
+           sodipodi:type="arc"
+           sodipodi:cx="113.27558"
+           sodipodi:cy="121.1898"
+           sodipodi:rx="8"
+           sodipodi:ry="8"
+           sodipodi:start="0.14645616"
+           sodipodi:end="0.12159971"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004"
+           id="text1-0-3-8"><tspan
+             sodipodi:role="line"
+             id="tspan1-3-7-2"
+             style="font-size:14.1111px;stroke-width:0.264583"
+             x="89.295685"
+             y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12-0">C</tspan>TGN</tspan></text>
+        <rect
+           style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+           id="rect1-2-8-7"
+           width="53.922192"
+           height="12.553314"
+           x="86.885094"
+           y="129.46358" />
+      </g>
+    </g>
+    <g
+       id="g2-3"
+       transform="translate(61.974842,49.252287)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-0"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-6"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-22"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12-5">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-22"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g15"
+       transform="translate(57.030635,-48.78693)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-10"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-1"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-8"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#2b0000"
+   id="tspan12-7">C</tspan>T<tspan
+   style="fill:#ff0000"
+   id="tspan15">G</tspan>N</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-6"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 122.68012,50.852211 40.33761,18.252704"
+       id="path15"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g4"
+       inkscape:connection-end="#path1-6-1-10" />
+    <g
+       id="g2-8"
+       transform="translate(1.4347664,47.180175)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-8"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-5"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan13">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-2"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g2-84"
+       transform="translate(-72.484278,47.033675)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-1"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-7"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-1"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004"><tspan
+   style="fill:#ff0000"
+   id="tspan11">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-8"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 87.221337,53.06628 -8.50064,14.418935"
+       id="path4"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g4"
+       inkscape:connection-end="#g3" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 63.596769,92.496712 48.627283,116.80554"
+       id="path5"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g3"
+       inkscape:connection-end="#g2" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 84.51551,92.496712 21.38437,25.595218"
+       id="path6"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g3"
+       inkscape:connection-end="#g1" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 41.975642,141.58636 -0.346901,18.68113"
+       id="path7"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g2"
+       inkscape:connection-end="#g2-84" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 114.28452,142.01689 0.55816,18.35423"
+       id="path8"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1"
+       inkscape:connection-end="#g2-8" />
+    <text
+       xml:space="preserve"
+       transform="scale(0.26458333)"
+       id="text13"
+       style="fill:black;fill-opacity:1;line-height:1.25;stroke:none;font-family:sans-serif;font-style:normal;font-weight:normal;font-size:40px;white-space:pre;shape-inside:url(#rect13)" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 175.73502,162.45692 -0.12291,-20.57388"
+       id="path17"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g2-3"
+       inkscape:connection-end="#g16" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 172.25419,93.229961 1.8984,19.866499"
+       id="path18"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g15"
+       inkscape:connection-end="#g16" />
+  </g>
+</svg>
diff --git a/doc/img/sufixtree_a.png b/doc/img/sufixtree_a.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8d913c5b59ff411626fcc09517f66fca5c38cdd
Binary files /dev/null and b/doc/img/sufixtree_a.png differ
diff --git a/doc/img/sufixtree_a.svg b/doc/img/sufixtree_a.svg
new file mode 100644
index 0000000000000000000000000000000000000000..47fc04751b733e8edeed2ac8d34b74853d34922c
--- /dev/null
+++ b/doc/img/sufixtree_a.svg
@@ -0,0 +1,477 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="188.91048mm"
+   height="172.12462mm"
+   viewBox="0 0 188.91048 172.12462"
+   version="1.1"
+   id="svg1"
+   sodipodi:docname="sufixtree_a.svg"
+   inkscape:version="1.3 (0e150ed, 2023-07-21)"
+   inkscape:export-filename="sufixtree_a.png"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="0.92737795"
+     inkscape:cx="343.98057"
+     inkscape:cy="487.93483"
+     inkscape:window-width="1392"
+     inkscape:window-height="1184"
+     inkscape:window-x="1821"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1">
+    <rect
+       x="288.98682"
+       y="416.22729"
+       width="354.76367"
+       height="348.29382"
+       id="rect13" />
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-14.136232,-19.40915)">
+    <g
+       id="g4">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1"
+         sodipodi:type="arc"
+         sodipodi:cx="95.148415"
+         sodipodi:cy="32.239197"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 103.06277,33.406662 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865728 8,8 0 0 1 6.921197,8.905146" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="71.168518"
+         y="51.919418"
+         id="text1"><tspan
+           sodipodi:role="line"
+           id="tspan1"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="71.168518"
+           y="51.919418"><tspan
+   style="fill:#ff0000"
+   id="tspan8">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1"
+         width="53.922192"
+         height="12.553314"
+         x="68.757927"
+         y="40.512966" />
+    </g>
+    <g
+       id="g3">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-1"
+         sodipodi:type="arc"
+         sodipodi:cx="71.902306"
+         sodipodi:cy="71.669632"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 79.816661,72.837097 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865727 8,8 0 0 1 6.921198,8.905145" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.922413"
+         y="91.349846"
+         id="text1-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-8"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="47.922413"
+           y="91.349846"><tspan
+   style="fill:#ff0000"
+   id="tspan9">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-4"
+         width="53.922192"
+         height="12.553314"
+         x="45.511829"
+         y="79.943398" />
+    </g>
+    <g
+       id="g2">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6"
+         sodipodi:type="arc"
+         sodipodi:cx="41.672695"
+         sodipodi:cy="120.75927"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 49.587051,121.92673 a 8,8 0 0 1 -9.032618,6.754 8,8 0 0 1 -6.809991,-8.99048 8,8 0 0 1 8.947982,-6.86572 8,8 0 0 1 6.921198,8.90514" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="17.692799"
+         y="140.4395"
+         id="text1-0"><tspan
+           sodipodi:role="line"
+           id="tspan1-3"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="17.692799"
+           y="140.4395"><tspan
+   style="fill:#ff0000"
+   id="tspan10">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2"
+         width="53.922192"
+         height="12.553314"
+         x="15.282207"
+         y="129.03305" />
+    </g>
+    <g
+       id="g1">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g16">
+      <g
+         id="g2-2"
+         transform="translate(61.679819,-0.13385004)">
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+           id="path1-6-1-9"
+           sodipodi:type="arc"
+           sodipodi:cx="113.27558"
+           sodipodi:cy="121.1898"
+           sodipodi:rx="8"
+           sodipodi:ry="8"
+           sodipodi:start="0.14645616"
+           sodipodi:end="0.12159971"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004"
+           id="text1-0-3-8"><tspan
+             sodipodi:role="line"
+             id="tspan1-3-7-2"
+             style="font-size:14.1111px;stroke-width:0.264583"
+             x="89.295685"
+             y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12-0">C</tspan>TGN</tspan></text>
+        <rect
+           style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+           id="rect1-2-8-7"
+           width="53.922192"
+           height="12.553314"
+           x="86.885094"
+           y="129.46358" />
+      </g>
+    </g>
+    <g
+       id="g2-3"
+       transform="translate(61.974842,49.252287)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-0"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-6"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-22"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12-5">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-22"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g15"
+       transform="translate(57.030635,-48.78693)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-10"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-1"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-8"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#2b0000"
+   id="tspan12-7">C</tspan>T<tspan
+   style="fill:#ff0000"
+   id="tspan15">G</tspan>N</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-6"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 122.68012,50.852211 40.33761,18.252704"
+       id="path15"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g4"
+       inkscape:connection-end="#path1-6-1-10" />
+    <g
+       id="g2-8"
+       transform="translate(1.4347664,47.180175)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-8"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-5"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan13">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-2"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g2-84"
+       transform="translate(-72.484278,47.033675)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-1"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-7"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-1"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004"><tspan
+   style="fill:#ff0000"
+   id="tspan11">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-8"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 87.221337,53.06628 -8.50064,14.418935"
+       id="path4"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g4"
+       inkscape:connection-end="#g3" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 63.596769,92.496712 48.627283,116.80554"
+       id="path5"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g3"
+       inkscape:connection-end="#g2" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 84.51551,92.496712 21.38437,25.595218"
+       id="path6"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g3"
+       inkscape:connection-end="#g1" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 41.975642,141.58636 -0.346901,18.68113"
+       id="path7"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g2"
+       inkscape:connection-end="#g2-84" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 114.28452,142.01689 0.55816,18.35423"
+       id="path8"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1"
+       inkscape:connection-end="#g2-8" />
+    <text
+       xml:space="preserve"
+       transform="scale(0.26458333)"
+       id="text13"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13);display:inline;fill:#000000;fill-opacity:1;stroke:none" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 175.73502,162.45692 -0.12291,-20.57388"
+       id="path17"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g2-3"
+       inkscape:connection-end="#g16" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 172.25419,93.229961 1.8984,19.866499"
+       id="path18"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g15"
+       inkscape:connection-end="#g16" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="167.18732"
+       y="27.103746"
+       id="text18"><tspan
+         sodipodi:role="line"
+         id="tspan18"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="27.103746">AAAA</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="40.33287"
+         id="tspan19">AACC</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="53.561996"
+         id="tspan20">AGCC</tspan></text>
+  </g>
+</svg>
diff --git a/doc/img/sufixtree_b.png b/doc/img/sufixtree_b.png
new file mode 100644
index 0000000000000000000000000000000000000000..11f5f0da594c3cbfcb6fe15b654ddaee8435bfa4
Binary files /dev/null and b/doc/img/sufixtree_b.png differ
diff --git a/doc/img/sufixtree_b.svg b/doc/img/sufixtree_b.svg
new file mode 100644
index 0000000000000000000000000000000000000000..401f6400a3cc3125f1ce6b3c528df4fd9874954a
--- /dev/null
+++ b/doc/img/sufixtree_b.svg
@@ -0,0 +1,510 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="188.91048mm"
+   height="172.12462mm"
+   viewBox="0 0 188.91048 172.12462"
+   version="1.1"
+   id="svg1"
+   sodipodi:docname="sufixtree_b.svg"
+   inkscape:version="1.3 (0e150ed, 2023-07-21)"
+   inkscape:export-filename="sufixtree_b.png"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="0.92737795"
+     inkscape:cx="343.98057"
+     inkscape:cy="487.93483"
+     inkscape:window-width="1392"
+     inkscape:window-height="1184"
+     inkscape:window-x="1821"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1">
+    <rect
+       x="288.98682"
+       y="416.22729"
+       width="354.76367"
+       height="348.29382"
+       id="rect13" />
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-14.136232,-19.40915)">
+    <g
+       id="g4">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1"
+         sodipodi:type="arc"
+         sodipodi:cx="95.148415"
+         sodipodi:cy="32.239197"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 103.06277,33.406662 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865728 8,8 0 0 1 6.921197,8.905146" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="71.168518"
+         y="51.919418"
+         id="text1"><tspan
+           sodipodi:role="line"
+           id="tspan1"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="71.168518"
+           y="51.919418"><tspan
+   style="fill:#ff0000"
+   id="tspan8">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1"
+         width="53.922192"
+         height="12.553314"
+         x="68.757927"
+         y="40.512966" />
+    </g>
+    <g
+       id="g3">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-1"
+         sodipodi:type="arc"
+         sodipodi:cx="71.902306"
+         sodipodi:cy="71.669632"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 79.816661,72.837097 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865727 8,8 0 0 1 6.921198,8.905145" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.922413"
+         y="91.349846"
+         id="text1-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-8"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="47.922413"
+           y="91.349846"><tspan
+   style="fill:#ff0000"
+   id="tspan9">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-4"
+         width="53.922192"
+         height="12.553314"
+         x="45.511829"
+         y="79.943398" />
+    </g>
+    <g
+       id="g2">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6"
+         sodipodi:type="arc"
+         sodipodi:cx="41.672695"
+         sodipodi:cy="120.75927"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 49.587051,121.92673 a 8,8 0 0 1 -9.032618,6.754 8,8 0 0 1 -6.809991,-8.99048 8,8 0 0 1 8.947982,-6.86572 8,8 0 0 1 6.921198,8.90514" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="17.692799"
+         y="140.4395"
+         id="text1-0"><tspan
+           sodipodi:role="line"
+           id="tspan1-3"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="17.692799"
+           y="140.4395"><tspan
+   style="fill:#ff0000"
+   id="tspan10">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2"
+         width="53.922192"
+         height="12.553314"
+         x="15.282207"
+         y="129.03305" />
+    </g>
+    <g
+       id="g1">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g16">
+      <g
+         id="g2-2"
+         transform="translate(61.679819,-0.13385004)">
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+           id="path1-6-1-9"
+           sodipodi:type="arc"
+           sodipodi:cx="113.27558"
+           sodipodi:cy="121.1898"
+           sodipodi:rx="8"
+           sodipodi:ry="8"
+           sodipodi:start="0.14645616"
+           sodipodi:end="0.12159971"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004"
+           id="text1-0-3-8"><tspan
+             sodipodi:role="line"
+             id="tspan1-3-7-2"
+             style="font-size:14.1111px;stroke-width:0.264583"
+             x="89.295685"
+             y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12-0">C</tspan>TGN</tspan></text>
+        <rect
+           style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+           id="rect1-2-8-7"
+           width="53.922192"
+           height="12.553314"
+           x="86.885094"
+           y="129.46358" />
+      </g>
+    </g>
+    <g
+       id="g2-3"
+       transform="translate(61.974842,49.252287)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-0"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-6"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-22"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12-5">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-22"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g15"
+       transform="translate(57.030635,-48.78693)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-10"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-1"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-8"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#2b0000"
+   id="tspan12-7">C</tspan>T<tspan
+   style="fill:#ff0000"
+   id="tspan15">G</tspan>N</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-6"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 122.68012,50.852211 40.33761,18.252704"
+       id="path15"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g4"
+       inkscape:connection-end="#path1-6-1-10" />
+    <g
+       id="g2-8"
+       transform="translate(1.4347664,47.180175)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-8"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-5"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan13">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-2"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g2-84"
+       transform="translate(-72.484278,47.033675)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-1"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-7"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-1"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004"><tspan
+   style="fill:#ff0000"
+   id="tspan11">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-8"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 87.221337,53.06628 -8.50064,14.418935"
+       id="path4"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g4"
+       inkscape:connection-end="#g3" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 63.596769,92.496712 48.627283,116.80554"
+       id="path5"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g3"
+       inkscape:connection-end="#g2" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 84.51551,92.496712 21.38437,25.595218"
+       id="path6"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g3"
+       inkscape:connection-end="#g1" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 41.975642,141.58636 -0.346901,18.68113"
+       id="path7"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g2"
+       inkscape:connection-end="#g2-84" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 114.28452,142.01689 0.55816,18.35423"
+       id="path8"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1"
+       inkscape:connection-end="#g2-8" />
+    <text
+       xml:space="preserve"
+       transform="scale(0.26458333)"
+       id="text13"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13);display:inline;fill:#000000;fill-opacity:1;stroke:none" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 175.73502,162.45692 -0.12291,-20.57388"
+       id="path17"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g2-3"
+       inkscape:connection-end="#g16" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 172.25419,93.229961 1.8984,19.866499"
+       id="path18"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g15"
+       inkscape:connection-end="#g16" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="167.18732"
+       y="27.103746"
+       id="text18"><tspan
+         sodipodi:role="line"
+         id="tspan18"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="27.103746">AAAA</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="40.33287"
+         id="tspan19">AACC</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="53.561996"
+         id="tspan20">AGCC</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="37.816349"
+       y="172.33134"
+       id="text21"><tspan
+         sodipodi:role="line"
+         id="tspan21"
+         style="stroke-width:0.264583"
+         x="37.816349"
+         y="172.33134">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="109.99791"
+       y="172.04605"
+       id="text22"><tspan
+         sodipodi:role="line"
+         id="tspan22"
+         style="stroke-width:0.264583"
+         x="109.99791"
+         y="172.04605">1e5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="172.76447"
+       y="174.32846"
+       id="text23"><tspan
+         sodipodi:role="line"
+         id="tspan23"
+         style="stroke-width:0.264583"
+         x="172.76447"
+         y="174.32846">5</tspan></text>
+  </g>
+</svg>
diff --git a/doc/img/sufixtree_c.png b/doc/img/sufixtree_c.png
new file mode 100644
index 0000000000000000000000000000000000000000..7962dda2baa21df3cc91feb7f6e031ecf1a22739
Binary files /dev/null and b/doc/img/sufixtree_c.png differ
diff --git a/doc/img/sufixtree_c.svg b/doc/img/sufixtree_c.svg
new file mode 100644
index 0000000000000000000000000000000000000000..867d42e72cb52646d4927469676d91dc42a9f8a9
--- /dev/null
+++ b/doc/img/sufixtree_c.svg
@@ -0,0 +1,373 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="188.91048mm"
+   height="172.12462mm"
+   viewBox="0 0 188.91048 172.12462"
+   version="1.1"
+   id="svg1"
+   sodipodi:docname="sufixtree_c.svg"
+   inkscape:version="1.3 (0e150ed, 2023-07-21)"
+   inkscape:export-filename="sufixtree_c.png"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="0.92737795"
+     inkscape:cx="315.40539"
+     inkscape:cy="481.46498"
+     inkscape:window-width="1392"
+     inkscape:window-height="1212"
+     inkscape:window-x="1821"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1">
+    <rect
+       x="288.98682"
+       y="416.22729"
+       width="354.76367"
+       height="348.29382"
+       id="rect13" />
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-14.136232,-19.40915)">
+    <g
+       id="g4">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1"
+         sodipodi:type="arc"
+         sodipodi:cx="95.148415"
+         sodipodi:cy="32.239197"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 103.06277,33.406662 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865728 8,8 0 0 1 6.921197,8.905146" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="71.168518"
+         y="51.919418"
+         id="text1"><tspan
+           sodipodi:role="line"
+           id="tspan1"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="71.168518"
+           y="51.919418"><tspan
+   style="fill:#ff0000"
+   id="tspan8">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1"
+         width="53.922192"
+         height="12.553314"
+         x="68.757927"
+         y="40.512966" />
+    </g>
+    <g
+       id="g3">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-1"
+         sodipodi:type="arc"
+         sodipodi:cx="71.902306"
+         sodipodi:cy="71.669632"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 79.816661,72.837097 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865727 8,8 0 0 1 6.921198,8.905145" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.922413"
+         y="91.349846"
+         id="text1-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-8"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="47.922413"
+           y="91.349846"><tspan
+   style="fill:#ff0000"
+   id="tspan9">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-4"
+         width="53.922192"
+         height="12.553314"
+         x="45.511829"
+         y="79.943398" />
+    </g>
+    <g
+       id="g2">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6"
+         sodipodi:type="arc"
+         sodipodi:cx="41.672695"
+         sodipodi:cy="120.75927"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 49.587051,121.92673 a 8,8 0 0 1 -9.032618,6.754 8,8 0 0 1 -6.809991,-8.99048 8,8 0 0 1 8.947982,-6.86572 8,8 0 0 1 6.921198,8.90514" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="17.692799"
+         y="140.4395"
+         id="text1-0"><tspan
+           sodipodi:role="line"
+           id="tspan1-3"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="17.692799"
+           y="140.4395"><tspan
+   style="fill:#ff0000"
+   id="tspan10">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2"
+         width="53.922192"
+         height="12.553314"
+         x="15.282207"
+         y="129.03305" />
+    </g>
+    <g
+       id="g1">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan12">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g2-8"
+       transform="translate(1.4347664,47.180175)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-8"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-3"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-5"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004">A<tspan
+   style="fill:#ff0000"
+   id="tspan13">C</tspan>TGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-2"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <g
+       id="g2-84"
+       transform="translate(-72.484278,47.033675)">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="path1-6-1-1"
+         sodipodi:type="arc"
+         sodipodi:cx="113.27558"
+         sodipodi:cy="121.1898"
+         sodipodi:rx="8"
+         sodipodi:ry="8"
+         sodipodi:start="0.14645616"
+         sodipodi:end="0.12159971"
+         sodipodi:open="true"
+         sodipodi:arc-type="arc"
+         d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="89.295685"
+         y="140.87004"
+         id="text1-0-3-7"><tspan
+           sodipodi:role="line"
+           id="tspan1-3-7-1"
+           style="font-size:14.1111px;stroke-width:0.264583"
+           x="89.295685"
+           y="140.87004"><tspan
+   style="fill:#ff0000"
+   id="tspan11">A</tspan>CTGN</tspan></text>
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+         id="rect1-2-8-8"
+         width="53.922192"
+         height="12.553314"
+         x="86.885094"
+         y="129.46358" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 87.221337,53.06628 -8.50064,14.418935"
+       id="path4"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g4"
+       inkscape:connection-end="#g3" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 63.596769,92.496712 48.627283,116.80554"
+       id="path5"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g3"
+       inkscape:connection-end="#g2" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 84.51551,92.496712 21.38437,25.595218"
+       id="path6"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g3"
+       inkscape:connection-end="#g1" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 41.975642,141.58636 -0.346901,18.68113"
+       id="path7"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g2"
+       inkscape:connection-end="#g2-84" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 114.28452,142.01689 0.55816,18.35423"
+       id="path8"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1"
+       inkscape:connection-end="#g2-8" />
+    <text
+       xml:space="preserve"
+       transform="scale(0.26458333)"
+       id="text13"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13);display:inline;fill:#000000;fill-opacity:1;stroke:none" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="167.18732"
+       y="27.103746"
+       id="text18"><tspan
+         sodipodi:role="line"
+         id="tspan18"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="27.103746">AAAA</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="40.33287"
+         id="tspan19">AACC</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.264583"
+         x="167.18732"
+         y="53.561996"
+         id="tspan20">AGCC</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+       id="rect23"
+       width="44.792511"
+       height="12.553313"
+       x="48.943146"
+       y="161.48984" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:8.81944px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="50.024837"
+       y="170.76692"
+       id="text21"><tspan
+         sodipodi:role="line"
+         id="tspan21"
+         style="font-size:8.81944px;stroke-width:0.264583"
+         x="50.024837"
+         y="170.76692">3, 0,..., 5</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1"
+       id="rect23-7"
+       width="56.204609"
+       height="12.553314"
+       x="124.51826"
+       y="162.15982" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:8.81944px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="125.59996"
+       y="171.4369"
+       id="text21-5"><tspan
+         sodipodi:role="line"
+         id="tspan21-0"
+         style="font-size:8.81944px;stroke-width:0.264583"
+         x="125.59996"
+         y="171.4369">4, 5,..., 1e5</tspan></text>
+  </g>
+</svg>
diff --git a/doc/presentation.html b/doc/presentation.html
new file mode 100644
index 0000000000000000000000000000000000000000..2d3a0de27de638e3691d08ebf9c38f9aa38de3ee
--- /dev/null
+++ b/doc/presentation.html
@@ -0,0 +1,991 @@
+<!DOCTYPE html>
+<html lang="en"><head>
+<script src="presentation_files/libs/clipboard/clipboard.min.js"></script>
+<script src="presentation_files/libs/quarto-html/tabby.min.js"></script>
+<script src="presentation_files/libs/quarto-html/popper.min.js"></script>
+<script src="presentation_files/libs/quarto-html/tippy.umd.min.js"></script>
+<link href="presentation_files/libs/quarto-html/tippy.css" rel="stylesheet">
+<link href="presentation_files/libs/quarto-html/light-border.css" rel="stylesheet">
+<link href="presentation_files/libs/quarto-html/quarto-html.min.css" rel="stylesheet" data-mode="light">
+<link href="presentation_files/libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles"><meta charset="utf-8">
+  <meta name="generator" content="quarto-1.3.450">
+
+  <meta name="author" content="laurent modolo">
+  <title>Kmer diff</title>
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
+  <link rel="stylesheet" href="presentation_files/libs/revealjs/dist/reset.css">
+  <link rel="stylesheet" href="presentation_files/libs/revealjs/dist/reveal.css">
+  <style>
+    code{white-space: pre-wrap;}
+    span.smallcaps{font-variant: small-caps;}
+    div.columns{display: flex; gap: min(4vw, 1.5em);}
+    div.column{flex: auto; overflow-x: auto;}
+    div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
+    ul.task-list{list-style: none;}
+    ul.task-list li input[type="checkbox"] {
+      width: 0.8em;
+      margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 
+      vertical-align: middle;
+    }
+  </style>
+  <link rel="stylesheet" href="presentation_files/libs/revealjs/dist/theme/quarto.css">
+  <link href="presentation_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.css" rel="stylesheet">
+  <link href="presentation_files/libs/revealjs/plugin/reveal-menu/menu.css" rel="stylesheet">
+  <link href="presentation_files/libs/revealjs/plugin/reveal-menu/quarto-menu.css" rel="stylesheet">
+  <link href="presentation_files/libs/revealjs/plugin/reveal-pointer/pointer.css" rel="stylesheet">
+  <link href="presentation_files/libs/revealjs/plugin/quarto-support/footer.css" rel="stylesheet">
+  <style type="text/css">
+
+  .callout {
+    margin-top: 1em;
+    margin-bottom: 1em;  
+    border-radius: .25rem;
+  }
+
+  .callout.callout-style-simple { 
+    padding: 0em 0.5em;
+    border-left: solid #acacac .3rem;
+    border-right: solid 1px silver;
+    border-top: solid 1px silver;
+    border-bottom: solid 1px silver;
+    display: flex;
+  }
+
+  .callout.callout-style-default {
+    border-left: solid #acacac .3rem;
+    border-right: solid 1px silver;
+    border-top: solid 1px silver;
+    border-bottom: solid 1px silver;
+  }
+
+  .callout .callout-body-container {
+    flex-grow: 1;
+  }
+
+  .callout.callout-style-simple .callout-body {
+    font-size: 1rem;
+    font-weight: 400;
+  }
+
+  .callout.callout-style-default .callout-body {
+    font-size: 0.9rem;
+    font-weight: 400;
+  }
+
+  .callout.callout-titled.callout-style-simple .callout-body {
+    margin-top: 0.2em;
+  }
+
+  .callout:not(.callout-titled) .callout-body {
+      display: flex;
+  }
+
+  .callout:not(.no-icon).callout-titled.callout-style-simple .callout-content {
+    padding-left: 1.6em;
+  }
+
+  .callout.callout-titled .callout-header {
+    padding-top: 0.2em;
+    margin-bottom: -0.2em;
+  }
+
+  .callout.callout-titled .callout-title  p {
+    margin-top: 0.5em;
+    margin-bottom: 0.5em;
+  }
+    
+  .callout.callout-titled.callout-style-simple .callout-content  p {
+    margin-top: 0;
+  }
+
+  .callout.callout-titled.callout-style-default .callout-content  p {
+    margin-top: 0.7em;
+  }
+
+  .callout.callout-style-simple div.callout-title {
+    border-bottom: none;
+    font-size: .9rem;
+    font-weight: 600;
+    opacity: 75%;
+  }
+
+  .callout.callout-style-default  div.callout-title {
+    border-bottom: none;
+    font-weight: 600;
+    opacity: 85%;
+    font-size: 0.9rem;
+    padding-left: 0.5em;
+    padding-right: 0.5em;
+  }
+
+  .callout.callout-style-default div.callout-content {
+    padding-left: 0.5em;
+    padding-right: 0.5em;
+  }
+
+  .callout.callout-style-simple .callout-icon::before {
+    height: 1rem;
+    width: 1rem;
+    display: inline-block;
+    content: "";
+    background-repeat: no-repeat;
+    background-size: 1rem 1rem;
+  }
+
+  .callout.callout-style-default .callout-icon::before {
+    height: 0.9rem;
+    width: 0.9rem;
+    display: inline-block;
+    content: "";
+    background-repeat: no-repeat;
+    background-size: 0.9rem 0.9rem;
+  }
+
+  .callout-title {
+    display: flex
+  }
+    
+  .callout-icon::before {
+    margin-top: 1rem;
+    padding-right: .5rem;
+  }
+
+  .callout.no-icon::before {
+    display: none !important;
+  }
+
+  .callout.callout-titled .callout-body > .callout-content > :last-child {
+    margin-bottom: 0.5rem;
+  }
+
+  .callout.callout-titled .callout-icon::before {
+    margin-top: .5rem;
+    padding-right: .5rem;
+  }
+
+  .callout:not(.callout-titled) .callout-icon::before {
+    margin-top: 1rem;
+    padding-right: .5rem;
+  }
+
+  /* Callout Types */
+
+  div.callout-note {
+    border-left-color: #4582ec !important;
+  }
+
+  div.callout-note .callout-icon::before {
+    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAEU0lEQVRYCcVXTWhcVRQ+586kSUMMxkyaElstCto2SIhitS5Ek8xUKV2poatCcVHtUlFQk8mbaaziwpWgglJwVaquitBOfhQXFlqlzSJpFSpIYyXNjBNiTCck7x2/8/LeNDOZxDuEkgOXe++553zfefee+/OYLOXFk3+1LLrRdiO81yNqZ6K9cG0P3MeFaMIQjXssE8Z1JzLO9ls20MBZX7oG8w9GxB0goaPrW5aNMp1yOZIa7Wv6o2ykpLtmAPs/vrG14Z+6d4jpbSKuhdcSyq9wGMPXjonwmESXrriLzFGOdDBLB8Y6MNYBu0dRokSygMA/mrun8MGFN3behm6VVAwg4WR3i6FvYK1T7MHo9BK7ydH+1uurECoouk5MPRyVSBrBHMYwVobG2aOXM07sWrn5qgB60rc6mcwIDJtQrnrEr44kmy+UO9r0u9O5/YbkS9juQckLed3DyW2XV/qWBBB3ptvI8EUY3I9p/67OW+g967TNr3Sotn3IuVlfMLVnsBwH4fsnebJvyGm5GeIUA3jljERmrv49SizPYuq+z7c2H/jlGC+Ghhupn/hcapqmcudB9jwJ/3jvnvu6vu5lVzF1fXyZuZZ7U8nRmVzytvT+H3kilYvH09mLWrQdwFSsFEsxFVs5fK7A0g8gMZjbif4ACpKbjv7gNGaD8bUrlk8x+KRflttr22JEMRUbTUwwDQScyzPgedQHZT0xnx7ujw2jfVfExwYHwOsDTjLdJ2ebmeQIlJ7neo41s/DrsL3kl+W2lWvAga0tR3zueGr6GL78M3ifH0rGXrBC2aAR8uYcIA5gwV8zIE8onoh8u0Fca/ciF7j1uOzEnqcIm59sEXoGc0+z6+H45V1CvAvHcD7THztu669cnp+L0okAeIc6zjbM/24LgGM1gZk7jnRu1aQWoU9sfUOuhrmtaPIO3YY1KLLWZaEO5TKUbMY5zx8W9UJ6elpLwKXbsaZ4EFl7B4bMtDv0iRipKoDQT2sNQI9b1utXFdYisi+wzZ/ri/1m7QfDgEuvgUUEIJPq3DhX/5DWNqIXDOweC2wvIR90Oq3lDpdMIgD2r0dXvGdsEW5H6x6HLRJYU7C69VefO1x8Gde1ZFSJLfWS1jbCnhtOPxmpfv2LXOA2Xk2tvnwKKPFuZ/oRmwBwqRQDcKNeVQkYcOjtWVBuM/JuYw5b6isojIkYxyYAFn5K7ZBF10fea52y8QltAg6jnMqNHFBmGkQ1j+U43HMi2xMar1Nv0zGsf1s8nUsmUtPOOrbFIR8bHFDMB5zL13Gmr/kGlCkUzedTzzmzsaJXhYawnA3UmARpiYj5ooJZiUoxFRtK3X6pgNPv+IZVPcnwbOl6f+aBaO1CNvPW9n9LmCp01nuSaTRF2YxHqZ8DYQT6WsXT+RD6eUztwYLZ8rM+rcPxamv1VQzFUkzFXvkiVrySGQgJNvXHJAxiU3/NwiC03rSf05VBaPtu/Z7/B8Yn/w7eguloAAAAAElFTkSuQmCC');
+  }
+
+  div.callout-note.callout-style-default .callout-title {
+    background-color: #dae6fb
+  }
+
+  div.callout-important {
+    border-left-color: #d9534f !important;
+  }
+
+  div.callout-important .callout-icon::before {
+    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAEKklEQVRYCcVXTWhcVRS+575MJym48A+hSRFr00ySRQhURRfd2HYjk2SSTokuBCkU2o0LoSKKraKIBTcuFCoidGFD08nkBzdREbpQ1EDNIv8qSGMFUboImMSZd4/f9zJv8ibJMC8xJQfO3HPPPef7zrvvvnvviIkpC9nsw0UttFunbUhpFzFtarSd6WJkStVMw5xyVqYTvkwfzuf/5FgtkVoB0729j1rjXwThS7Vio+Mo6DNnvLfahoZ+i/o32lULuJ3NNiz7q6+pyAUkJaFF6JwaM2lUJlV0MlnQn5aTRbEu0SEqHUa0A4AdiGuB1kFXRfVyg5d87+Dg4DL6m2TLAub60ilj7A1Ec4odSAc8X95sHh7+ZRPCFo6Fnp7HfU/fBng/hi10CjCnWnJjsxvDNxWw0NfV6Rv5GgP3I3jGWXumdTD/3cbEOP2ZbOZp69yniG3FQ9z1jD7bnBu9Fc2tKGC2q+uAJOQHBDRiZX1x36o7fWBs7J9ownbtO+n0/qWkvW7UPIfc37WgT6ZGR++EOJyeQDSb9UB+DZ1G6DdLDzyS+b/kBCYGsYgJbSQHuThGKRcw5xdeQf8YdNHsc6ePXrlSYMBuSIAFTGAtQo+VuALo4BX83N190NWZWbynBjhOHsmNfFWLeL6v+ynsA58zDvvAC8j5PkbOcXCMg2PZFk3q8MjI7WAG/Dp9AwP7jdGBOOQkAvlFUB+irtm16I1Zw9YBcpGTGXYmk3kQIC/Cds55l+iMI3jqhjAuaoe+am2Jw5GT3Nbz3CkE12NavmzN5+erJW7046n/CH1RO/RVa8lBLozXk9uqykkGAyRXLWlLv5jyp4RFsG5vGVzpDLnIjTWgnRy2Rr+tDKvRc7Y8AyZq10jj8DqXdnIRNtFZb+t/ZRtXcDiVnzpqx8mPcDWxgARUqx0W1QB9MeUZiNrV4qP+Ehc+BpNgATsTX8ozYKL2NtFYAHc84fG7ndxUPr+AR/iQSns7uSUufAymwDOb2+NjK27lEFocm/EE2WpyIy/Hi66MWuMKJn8RvxIcj87IM5Vh9663ziW36kR0HNenXuxmfaD8JC7tfKbrhFr7LiZCrMjrzTeGx+PmkosrkNzW94ObzwocJ7A1HokLolY+AvkTiD/q1H0cN48c5EL8Crkttsa/AXQVDmutfyku0E7jShx49XqV3MFK8IryDhYVbj7Sj2P2eBxwcXoe8T8idsKKPRcnZw1b+slFTubwUwhktrfnAt7J++jwQtLZcm3sr9LQrjRzz6cfMv9aLvgmnAGvpoaGLxM4mAEaLV7iAzQ3oU0IvD5x9ix3yF2RAAuYAOO2f7PEFWCXZ4C9Pb2UsgDeVnFSpbFK7/IWu7TPTvBqzbGdCHOJQSxiEjt6IyZmxQyEJHv6xyQsYk//moVFsN2zP6fRImjfq7/n/wFDguUQFNEwugAAAABJRU5ErkJggg==');
+  }
+
+  div.callout-important.callout-style-default .callout-title {
+    background-color: #f7dddc
+  }
+
+  div.callout-warning {
+    border-left-color: #f0ad4e !important;
+  }
+
+  div.callout-warning .callout-icon::before {
+    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAETklEQVRYCeVWW2gcVRg+58yaTUnizqbipZeX4uWhBEniBaoUX1Ioze52t7sRq6APio9V9MEaoWlVsFasRq0gltaAPuxms8lu0gcviE/FFOstVbSIxgcv6SU7EZqmdc7v9+9mJtNks51NTUH84ed889/PP+cmxP+d5FIbMJmNbpREu4WUkiTtCicKny0l1pIKmBzovF2S+hIJHX8iEu3hZJ5lNZGqyRrGSIQpq15AzF28jgpeY6yk6GVdrfFqdrD6Iw+QlB8g0YS2g7dyQmXM/IDhBhT0UCiRf59lfqmmDvzRt6kByV/m4JjtzuaujMUM2c5Z2d6JdKrRb3K2q6mA+oYVz8JnDdKPmmNthzkAk/lN63sYPgevrguc72aZX/L9C6x09GYyxBgCX4NlvyGUHOKELlm5rXeR1kchuChJt4SSwyddZRXgvwMGvYo4QSlk3/zkHD8UHxwVJA6zjZZqP8v8kK8OWLnIZtLyCAJagYC4rTGW/9Pqj92N/c+LUaAj27movwbi19tk/whRCIE7Q9vyI6yvRpftAKVTdUjOW40X3h5OXsKCdmFcx0xlLJoSuQngnrJe7Kcjm4OMq9FlC7CMmScQANuNvjfP3PjGXDBaUQmbp296S5L4DrpbrHN1T87ZVEZVCzg1FF0Ft+dKrlLukI+/c9ENo+TvlTDbYFvuKPtQ9+l052rXrgKoWkDAFnvh0wTOmYn8R5f4k/jN/fZiCM1tQx9jQQ4ANhqG4hiL0qIFTGViG9DKB7GYzgubnpofgYRwO+DFjh0Zin2m4b/97EDkXkc+f6xYAPX0KK2I/7fUQuwzuwo/L3AkcjugPNixC8cHf0FyPjWlItmLxWw4Ou9YsQCr5fijMGoD/zpdRy95HRysyXA74MWOnscpO4j2y3HAVisw85hX5+AFBRSHt4ShfLFkIMXTqyKFc46xdzQM6XbAi702a7sy04J0+feReMFKp5q9esYLCqAZYw/k14E/xcLLsFElaornTuJB0svMuJINy8xkIYuL+xPAlWRceH6+HX7THJ0djLUom46zREu7tTkxwmf/FdOZ/sh6Q8qvEAiHpm4PJ4a/doJe0gH1t+aHRgCzOvBvJedEK5OFE5jpm4AGP2a8Dxe3gGJ/pAutug9Gp6he92CsSsWBaEcxGx0FHytmIpuqGkOpldqNYQK8cSoXvd+xLxXADw0kf6UkJNFtdo5MOgaLjiQOQHcn+A6h5NuL2s0qsC2LOM75PcF3yr5STuBSAcGG+meA14K/CI21HcS4LBT6tv0QAh8Dr5l93AhZzG5ZJ4VxAqdZUEl9z7WJ4aN+svMvwHHL21UKTd1mqvChH7/Za5xzXBBKrUcB0TQ+Ulgkfbi/H/YT5EptrGzsEK7tR1B7ln9BBwckYfMiuSqklSznIuoIIOM42MQO+QnduCoFCI0bpkzjCjddHPN/F+2Yu+sd9bKNpVwHhbS3LluK/0zgfwD0xYI5dXuzlQAAAABJRU5ErkJggg==');
+  }
+
+  div.callout-warning.callout-style-default .callout-title {
+    background-color: #fcefdc
+  }
+
+  div.callout-tip {
+    border-left-color: #02b875 !important;
+  }
+
+  div.callout-tip .callout-icon::before {
+    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAADr0lEQVRYCe1XTWgTQRj9ZjZV8a9SPIkKgj8I1bMHsUWrqYLVg4Ue6v9BwZOxSYsIerFao7UiUryIqJcqgtpimhbBXoSCVxUFe9CTiogUrUp2Pt+3aUI2u5vdNh4dmMzOzHvvezuz8xNFM0mjnbXaNu1MvFWRXkXEyE6aYOYJpdW4IXuA4r0fo8qqSMDBU0v1HJUgVieAXxzCsdE/YJTdFcVIZQNMyhruOMJKXYFoLfIfIvVIMWdsrd+Rpd86ZmyzzjJmLStqRn0v8lzkb4rVIXvnpScOJuAn2ACC65FkPzEdEy4TPWRLJ2h7z4cArXzzaOdKlbOvKKX25Wl00jSnrwVxAg3o4dRxhO13RBSdNvH0xSARv3adTXbBdTf64IWO2vH0LT+cv4GR1DJt+DUItaQogeBX/chhbTBxEiZ6gftlDNXTrvT7co4ub5A6gp9HIcHvzTa46OS5fBeP87Qm0fQkr4FsYgVQ7Qg+ZayaDg9jhg1GkWj8RG6lkeSacrrHgDaxdoBiZPg+NXV/KifMuB6//JmYH4CntVEHy/keA6x4h4CU5oFy8GzrBS18cLJMXcljAKB6INjWsRcuZBWVaS3GDrqB7rdapVIeA+isQ57Eev9eCqzqOa81CY05VLd6SamW2wA2H3SiTbnbSxmzfp7WtKZkqy4mdyAlGx7ennghYf8voqp9cLSgKdqNfa6RdRsAAkPwRuJZNbpByn+RrJi1RXTwdi8RQF6ymDwGMAtZ6TVE+4uoKh+MYkcLsT0Hk8eAienbiGdjJHZTpmNjlbFJNKDVAp2fJlYju6IreQxQ08UJDNYdoLSl6AadO+fFuCQqVMB1NJwPm69T04Wv5WhfcWyfXQB+wXRs1pt+nCknRa0LVzSA/2B+a9+zQJadb7IyyV24YAxKp2Jqs3emZTuNnKxsah+uabKbMk7CbTgJx/zIgQYErIeTKRQ9yD9wxVof5YolPHqaWo7TD6tJlh7jQnK5z2n3+fGdggIOx2kaa2YI9QWarc5Ce1ipNWMKeSG4DysFF52KBmTNMmn5HqCFkwy34rDg05gDwgH3bBi+sgFhN/e8QvRn8kbamCOhgrZ9GJhFDgfcMHzFb6BAtjKpFhzTjwv1KCVuxHvCbsSiEz4CANnj84cwHdFXAbAOJ4LTSAawGWFn5tDhLMYz6nWeU2wJfIhmIJBefcd/A5FWQWGgrWzyORZ3Q6HuV+Jf0Bj+BTX69fm1zWgK7By1YTXchFDORywnfQ7GpzOo6S+qECrsx2ifVQAAAABJRU5ErkJggg==');
+  }
+
+  div.callout-tip.callout-style-default .callout-title {
+    background-color: #ccf1e3
+  }
+
+  div.callout-caution {
+    border-left-color: #fd7e14 !important;
+  }
+
+  div.callout-caution .callout-icon::before {
+    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAACV0lEQVRYCdVWzWoUQRCuqp2ICBLJXgITZL1EfQDBW/bkzUMUD7klD+ATSHBEfAIfQO+iXsWDxJsHL96EHAwhgzlkg8nBg25XWb0zIb0zs9muYYWkoKeru+vn664fBqElyZNuyh167NXJ8Ut8McjbmEraKHkd7uAnAFku+VWdb3reSmRV8PKSLfZ0Gjn3a6Xlcq9YGb6tADjn+lUfTXtVmaZ1KwBIvFI11rRXlWlatwIAAv2asaa9mlB9wwygiDX26qaw1yYPzFXg2N1GgG0FMF8Oj+VIx7E/03lHx8UhvYyNZLN7BwSPgekXXLribw7w5/c8EF+DBK5idvDVYtEEwMeYefjjLAdEyQ3M9nfOkgnPTEkYU+sxMq0BxNR6jExrAI31H1rzvLEfRIdgcv1XEdj6QTQAS2wtstEALLG1yEZ3QhH6oDX7ExBSFEkFINXH98NTrme5IOaaA7kIfiu2L8A3qhH9zRbukdCqdsA98TdElyeMe5BI8Rs2xHRIsoTSSVFfCFCWGPn9XHb4cdobRIWABNf0add9jakDjQJpJ1bTXOJXnnRXHRf+dNL1ZV1MBRCXhMbaHqGI1JkKIL7+i8uffuP6wVQAzO7+qVEbF6NbS0LJureYcWXUUhH66nLR5rYmva+2tjRFtojkM2aD76HEGAD3tPtKM309FJg5j/K682ywcWJ3PASCcycH/22u+Bh7Aa0ehM2Fu4z0SAE81HF9RkB21c5bEn4Dzw+/qNOyXr3DCTQDMBOdhi4nAgiFDGCinIa2owCEChUwD8qzd03PG+qdW/4fDzjUMcE1ZpIAAAAASUVORK5CYII=');
+  }
+
+  div.callout-caution.callout-style-default .callout-title {
+    background-color: #ffe5d0
+  }
+
+  </style>
+  <style type="text/css">
+    .reveal div.sourceCode {
+      margin: 0;
+      overflow: auto;
+    }
+    .reveal div.hanging-indent {
+      margin-left: 1em;
+      text-indent: -1em;
+    }
+    .reveal .slide:not(.center) {
+      height: 100%;
+    }
+    .reveal .slide.scrollable {
+      overflow-y: auto;
+    }
+    .reveal .footnotes {
+      height: 100%;
+      overflow-y: auto;
+    }
+    .reveal .slide .absolute {
+      position: absolute;
+      display: block;
+    }
+    .reveal .footnotes ol {
+      counter-reset: ol;
+      list-style-type: none; 
+      margin-left: 0;
+    }
+    .reveal .footnotes ol li:before {
+      counter-increment: ol;
+      content: counter(ol) ". "; 
+    }
+    .reveal .footnotes ol li > p:first-child {
+      display: inline-block;
+    }
+    .reveal .slide ul,
+    .reveal .slide ol {
+      margin-bottom: 0.5em;
+    }
+    .reveal .slide ul li,
+    .reveal .slide ol li {
+      margin-top: 0.4em;
+      margin-bottom: 0.2em;
+    }
+    .reveal .slide ul[role="tablist"] li {
+      margin-bottom: 0;
+    }
+    .reveal .slide ul li > *:first-child,
+    .reveal .slide ol li > *:first-child {
+      margin-block-start: 0;
+    }
+    .reveal .slide ul li > *:last-child,
+    .reveal .slide ol li > *:last-child {
+      margin-block-end: 0;
+    }
+    .reveal .slide .columns:nth-child(3) {
+      margin-block-start: 0.8em;
+    }
+    .reveal blockquote {
+      box-shadow: none;
+    }
+    .reveal .tippy-content>* {
+      margin-top: 0.2em;
+      margin-bottom: 0.7em;
+    }
+    .reveal .tippy-content>*:last-child {
+      margin-bottom: 0.2em;
+    }
+    .reveal .slide > img.stretch.quarto-figure-center,
+    .reveal .slide > img.r-stretch.quarto-figure-center {
+      display: block;
+      margin-left: auto;
+      margin-right: auto; 
+    }
+    .reveal .slide > img.stretch.quarto-figure-left,
+    .reveal .slide > img.r-stretch.quarto-figure-left  {
+      display: block;
+      margin-left: 0;
+      margin-right: auto; 
+    }
+    .reveal .slide > img.stretch.quarto-figure-right,
+    .reveal .slide > img.r-stretch.quarto-figure-right  {
+      display: block;
+      margin-left: auto;
+      margin-right: 0; 
+    }
+  </style>
+</head>
+<body class="quarto-light">
+  <div class="reveal">
+    <div class="slides">
+
+<section id="title-slide" class="quarto-title-block center">
+  <h1 class="title">Kmer diff</h1>
+
+<div class="quarto-title-authors">
+<div class="quarto-title-author">
+<div class="quarto-title-author-name">
+laurent modolo 
+</div>
+</div>
+</div>
+
+</section>
+<section id="background" class="slide level2">
+<h2>Background</h2>
+<p>The Delattre teams studies, <em>Mesorhabditis worms</em>, some species of which present atypical reproduction mechanisms.</p>
+<p>In a previous paper: <em>Males as somatic investment in a parthenogenetic nematode</em> <a href="https://doi.org/10.1126/science.aau0099">DOI: 10.1126/science.aau0099</a>, we caracterized contigs of a <em>de novo</em> genome assembly of <em>M. belaris</em> as</p>
+<div class="columns">
+<div class="column" style="width:40%;">
+<ul>
+<li><span style="color:blue;">Autosomal</span> chromosomes</li>
+<li><span style="color:red;">X</span> chromosome</li>
+<li><span style="color:green;">Y</span> chromosome</li>
+</ul>
+</div><div class="column" style="width:60%;">
+<p><img data-src="./img/science_figure.png" width="350"></p>
+</div>
+</div>
+</section>
+<section id="goal" class="slide level2">
+<h2>Goal</h2>
+<p>From raw sequencing data of male and female individuals, we want to identify <span class="math inline">\(k\)</span>-mers corresponding to :</p>
+<ul>
+<li><span style="color:blue;">Autosomal</span> chromosomes</li>
+<li><span style="color:red;">X</span> chromosome, if present</li>
+<li><span style="color:green;">Y</span> chromosome, if present</li>
+</ul>
+<div style="text-align: center">
+<strong>We can study the chromosomal system without an assembly</strong>
+</div>
+</section>
+<section id="phylogeny" class="slide level2">
+<h2>Phylogeny</h2>
+
+<img data-src="./img/phylogeny.png" class="r-stretch"></section>
+<section id="kmer-diff" class="slide level2">
+<h2>Kmer-diff</h2>
+<p>A nextflow pipeline to analyse the <span class="math inline">\(k\)</span>-mer content of fastq files</p>
+<ol type="1">
+<li>preprocess the fastq files</li>
+<li>count the <span class="math inline">\(k\)</span>-mers of each file</li>
+<li>merge the counts to get a table of male and female <span class="math inline">\(k\)</span>-mers counts</li>
+<li>test the sexual models</li>
+<li>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</li>
+</ol>
+</section>
+<section id="kmer-diff-1" class="slide level2">
+<h2>Kmer-diff</h2>
+
+<img data-src="./img/flowchart.png" class="r-stretch"></section>
+<section id="preprocessing" class="slide level2">
+<h2>Preprocessing</h2>
+<p><strong>preprocess the fastq files</strong></p>
+<p>Important for the clustering analysis:</p>
+<ul>
+<li>subsample to have the same number of reads between male and female</li>
+</ul>
+<p>Important for the <span class="math inline">\(k\)</span>-mer counting</p>
+<ul>
+<li>split the fastq files into managable size files (<span class="math inline">\(10ˆ6\)</span> reads per files)</li>
+</ul>
+</section>
+<section id="k-mer-count" class="slide level2">
+<h2><span class="math inline">\(k\)</span>-mer count</h2>
+<p><a href="https://github.com/angelovangel/fastkmers">fastqkmer</a></p>
+<pre><code>fastkmers -k 12 file.fastq &gt; file.csv</code></pre>
+<p>Run a <strong>sliding windows</strong> of size <span class="math inline">\(12\)</span> by step of <span class="math inline">\(1\)</span> along the reads counting all the occurrences of each <span class="math inline">\(k\)</span>-mers</p>
+<p>We have the letters: <span class="math inline">\(A,C,T,G\)</span> and <span class="math inline">\(N\)</span></p>
+<div style="text-align: center">
+<span class="math inline">\(244,140,625\)</span> possible <span class="math inline">\(k\)</span>-mers
+</div>
+<p>We split the fastq files into <span class="math inline">\(\sim\)</span> <span class="math inline">\(1400\)</span> subfiles of <span class="math inline">\(10^6\)</span> reads.</p>
+</section>
+<section id="merging-the-k-mers" class="slide level2">
+<h2>Merging the <span class="math inline">\(k\)</span>-mers</h2>
+<p><span class="math inline">\(\sim\)</span> <span class="math inline">\(1400\)</span> splits of <span class="math inline">\(10^6\)</span> reads <span class="math inline">\(\rightarrow\)</span> <span class="math inline">\(1400\)</span> csv files</p>
+<div class="columns">
+<div class="column" style="width:50%;">
+<ul>
+<li>large number of <span class="math inline">\(k\)</span>-mers</li>
+<li>Unordered</li>
+<li>not the same <span class="math inline">\(k\)</span>-mers a present in every files</li>
+</ul>
+<p><a href="https://gitbio.ens-lyon.fr/LBMC/Delattre/mergekmer">mergekmer</a> a small rust programme that build a <strong>sufix-tree</strong> of the <span class="math inline">\(k\)</span>-mer</p>
+</div><div class="column" style="width:50%;">
+<p><img data-src="./img/sufixtree_a.png"></p>
+</div>
+</div>
+</section>
+<section id="merging-the-k-mers-1" class="slide level2">
+<h2>Merging the <span class="math inline">\(k\)</span>-mers</h2>
+<p><a href="https://gitbio.ens-lyon.fr/LBMC/Delattre/mergekmer">mergekmer</a> a small rust programme that build a <strong>sufix-tree</strong> of the <span class="math inline">\(k\)</span>-mer</p>
+<div class="columns">
+<div class="column" style="width:50%;">
+<pre><code>merge fastkmers output
+
+Usage: mergekmer [OPTIONS] --output &lt;OUTPUT&gt;
+
+Options:
+  -c, --csv &lt;CSV&gt;...     list of csv files
+  -o, --output &lt;OUTPUT&gt;  merged csv file
+  -c, --collate          collate csv file
+  -h, --help             Print help
+  -V, --version          Print version</code></pre>
+<p>Each leafs of the tree contains the number of <span class="math inline">\(k\)</span>-mers</p>
+<p>The tree traversal is easy to compute with a recursive function</p>
+<p><strong>we can merge the counts of a given sex for each specie</strong></p>
+</div><div class="column" style="width:50%;">
+<p><img data-src="./img/sufixtree_b.png"></p>
+</div>
+</div>
+</section>
+<section id="merging-the-k-mers-2" class="slide level2">
+<h2>Merging the <span class="math inline">\(k\)</span>-mers</h2>
+<div class="columns">
+<div class="column" style="width:50%;">
+<pre><code>merge fastkmers output
+
+Usage: mergekmer [OPTIONS] --output &lt;OUTPUT&gt;
+
+Options:
+  -c, --csv &lt;CSV&gt;...     list of csv files
+  -o, --output &lt;OUTPUT&gt;  merged csv file
+  -c, --collate          collate csv file
+  -h, --help             Print help
+  -V, --version          Print version</code></pre>
+<p>In the <code>--collate</code> version earch leave contain a list of the count of the <span class="math inline">\(k\)</span>-mers in the female or male of a specie</p>
+<p><strong>we can fuse the counts of the male and female for each specie</strong></p>
+</div><div class="column" style="width:50%;">
+<p><img data-src="./img/sufixtree_c.png"></p>
+</div>
+</div>
+</section>
+<section id="test-the-sexual-model" class="slide level2">
+<h2>Test the sexual model</h2>
+<p><strong>We have the following possible models</strong></p>
+<div class="columns">
+<div class="column" style="width:33%;">
+<ul>
+<li><span style="color:red;">X</span><span style="color:green;">Y</span> system</li>
+</ul>
+<p><img data-src="./img/model_XY.png"></p>
+</div><div class="column" style="width:33%;">
+<ul>
+<li><span style="color:red;">X</span>O system</li>
+</ul>
+<p><img data-src="./img/model_XO.png"></p>
+</div><div class="column" style="width:33%;">
+<ul>
+<li>OO system</li>
+</ul>
+<p><img data-src="./img/model_OO.png"></p>
+</div>
+</div>
+</section>
+<section id="test-the-sexual-model-1" class="slide level2">
+<h2>Test the sexual model</h2>
+<div class="columns">
+<div class="column" style="width:33%;">
+<ul>
+<li><span style="color:red;">X</span><span style="color:green;">Y</span> system</li>
+</ul>
+<p><img data-src="./img/clustering_XY_naive.png"></p>
+</div><div class="column" style="width:33%;">
+<ul>
+<li><span style="color:red;">X</span>O system</li>
+</ul>
+<p><img data-src="./img/clustering_XO_naive.png"></p>
+</div><div class="column" style="width:33%;">
+<ul>
+<li>OO system</li>
+</ul>
+<p><img data-src="./img/clustering_OO_naive.png"></p>
+</div>
+</div>
+<ul>
+<li>A cluster with mean male <span class="math inline">\(=\)</span> mean female</li>
+<li>A cluster above the diagonale</li>
+<li>A cluster below the diagonale</li>
+</ul>
+</section>
+<section id="test-the-sexual-model-2" class="slide level2">
+<h2>Test the sexual model</h2>
+<div class="columns">
+<div class="column" style="width:25%;">
+<p><strong>data</strong></p>
+<p><img data-src="./img/model_XY.png"></p>
+</div><div class="column" style="width:25%;">
+<p><strong>XY model</strong></p>
+<p><img data-src="./img/clustering_XY_naive_XY.png"></p>
+</div><div class="column" style="width:25%;">
+<p><strong>XO model</strong></p>
+<p><img data-src="./img/clustering_XY_naive_XO.png"></p>
+</div><div class="column" style="width:25%;">
+<p><strong>OO model</strong></p>
+<p><img data-src="./img/clustering_XY_naive_OO.png"></p>
+</div>
+</div>
+<div class="columns">
+<div class="column" style="width:50%;">
+<p>Bayesian information criterion (BIC)</p>
+<p><img data-src="./img/clustering_XY_naive_BIC.png"></p>
+</div><div class="column" style="width:50%;">
+<p>Loglikelihood</p>
+<p><img data-src="./img/clustering_XY_naive_loglik.png"></p>
+</div>
+</div>
+</section>
+<section id="identify-the-ax-and-y-k-mers" class="slide level2">
+<h2>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</h2>
+<div class="columns">
+<div class="column" style="width:50%;">
+<p><img data-src="./img/clustering_XY_naive_XY.png"></p>
+</div><div class="column" style="width:50%;">
+<ul>
+<li>Can be used to compare model</li>
+<li>Not sensitive enough</li>
+<li>Cannot be used to classify individual <span class="math inline">\(k\)</span>-mers</li>
+</ul>
+</div>
+</div>
+</section>
+<section id="identify-the-ax-and-y-k-mers-1" class="slide level2">
+<h2>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</h2>
+<div class="columns">
+<div class="column" style="width:75%;">
+<p><img data-src="./img/clustering_XY_bayse_XY.png"></p>
+</div><div class="column" style="width:25%;">
+<ul>
+<li>Can choose the prior for each cluster (mean and shape)</li>
+<li>Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span></li>
+<li>Can choose the weight of each prior compared to the data</li>
+</ul>
+</div>
+</div>
+</section>
+<section id="identify-the-ax-and-y-k-mers-2" class="slide level2">
+<h2>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</h2>
+<div class="columns">
+<div class="column" style="width:75%;">
+<p><img data-src="./img/clustering_XY_bayse_XO.png"></p>
+</div><div class="column" style="width:25%;">
+<ul>
+<li>Can choose the prior for each cluster (mean and shape)</li>
+<li>Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span></li>
+<li>Can choose the weight of each prior compared to the data</li>
+</ul>
+</div>
+</div>
+</section>
+<section id="identify-the-ax-and-y-k-mers-3" class="slide level2">
+<h2>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</h2>
+<div class="columns">
+<div class="column" style="width:75%;">
+<p><img data-src="./img/clustering_XO_bayse_XO.png"></p>
+</div><div class="column" style="width:25%;">
+<ul>
+<li>Can choose the prior for each cluster (mean and shape)</li>
+<li>Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span></li>
+<li>Can choose the weight of each prior compared to the data</li>
+</ul>
+</div>
+</div>
+</section>
+<section id="count-problem" class="slide level2">
+<h2>Count problem</h2>
+<div class="columns">
+<div class="column" style="width:75%;">
+<p><img data-src="./img/count_problem.png"></p>
+</div><div class="column" style="width:25%;">
+<ul>
+<li>The coverage is not the same between the male and the female</li>
+</ul>
+</div>
+</div>
+</section>
+<section id="kmer-diff-2" class="slide level2">
+<h2>Kmer-diff</h2>
+<p>A nextflow pipeline to analyse the <span class="math inline">\(k\)</span>-mer content of fastq files</p>
+<ol type="1">
+<li>preprocess the fastq files
+<ul>
+<li><strong>subsample to have the same number of reads between male and female</strong></li>
+</ul></li>
+<li>count the <span class="math inline">\(k\)</span>-mers of each file</li>
+<li>merge the counts to get a table of male and female <span class="math inline">\(k\)</span>-mers counts</li>
+<li>test the sexual models</li>
+<li>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</li>
+</ol>
+<div class="footer footer-default">
+<p>laurent.modolo@ens-lyon.fr</p>
+</div>
+</section>
+    </div>
+  </div>
+
+  <script>window.backupDefine = window.define; window.define = undefined;</script>
+  <script src="presentation_files/libs/revealjs/dist/reveal.js"></script>
+  <!-- reveal.js plugins -->
+  <script src="presentation_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.js"></script>
+  <script src="presentation_files/libs/revealjs/plugin/pdf-export/pdfexport.js"></script>
+  <script src="presentation_files/libs/revealjs/plugin/reveal-menu/menu.js"></script>
+  <script src="presentation_files/libs/revealjs/plugin/reveal-menu/quarto-menu.js"></script>
+  <script src="presentation_files/libs/revealjs/plugin/reveal-pointer/pointer.js"></script>
+  <script src="presentation_files/libs/revealjs/plugin/quarto-support/support.js"></script>
+  
+
+  <script src="presentation_files/libs/revealjs/plugin/notes/notes.js"></script>
+  <script src="presentation_files/libs/revealjs/plugin/search/search.js"></script>
+  <script src="presentation_files/libs/revealjs/plugin/zoom/zoom.js"></script>
+  <script src="presentation_files/libs/revealjs/plugin/math/math.js"></script>
+  <script>window.define = window.backupDefine; window.backupDefine = undefined;</script>
+
+  <script>
+
+      // Full list of configuration options available at:
+      // https://revealjs.com/config/
+      Reveal.initialize({
+'controlsAuto': true,
+'previewLinksAuto': false,
+'smaller': false,
+'pdfSeparateFragments': false,
+'autoAnimateEasing': "ease",
+'autoAnimateDuration': 1,
+'autoAnimateUnmatched': true,
+'menu': {"side":"left","useTextContentForMissingTitles":true,"markers":false,"loadIcons":false,"custom":[{"title":"Tools","icon":"<i class=\"fas fa-gear\"></i>","content":"<ul class=\"slide-menu-items\">\n<li class=\"slide-tool-item active\" data-item=\"0\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.fullscreen(event)\"><kbd>f</kbd> Fullscreen</a></li>\n<li class=\"slide-tool-item\" data-item=\"1\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.speakerMode(event)\"><kbd>s</kbd> Speaker View</a></li>\n<li class=\"slide-tool-item\" data-item=\"2\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.overview(event)\"><kbd>o</kbd> Slide Overview</a></li>\n<li class=\"slide-tool-item\" data-item=\"3\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.togglePdfExport(event)\"><kbd>e</kbd> PDF Export Mode</a></li>\n<li class=\"slide-tool-item\" data-item=\"4\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.keyboardHelp(event)\"><kbd>?</kbd> Keyboard Help</a></li>\n</ul>"}],"openButton":true},
+'pointer': {"key":"q","color":"red","pointerSize":16,"alwaysVisible":false},
+'smaller': false,
+ 
+        // Display controls in the bottom right corner
+        controls: false,
+
+        // Help the user learn the controls by providing hints, for example by
+        // bouncing the down arrow when they first encounter a vertical slide
+        controlsTutorial: false,
+
+        // Determines where controls appear, "edges" or "bottom-right"
+        controlsLayout: 'edges',
+
+        // Visibility rule for backwards navigation arrows; "faded", "hidden"
+        // or "visible"
+        controlsBackArrows: 'faded',
+
+        // Display a presentation progress bar
+        progress: true,
+
+        // Display the page number of the current slide
+        slideNumber: 'c/t',
+
+        // 'all', 'print', or 'speaker'
+        showSlideNumber: 'all',
+
+        // Add the current slide number to the URL hash so that reloading the
+        // page/copying the URL will return you to the same slide
+        hash: true,
+
+        // Start with 1 for the hash rather than 0
+        hashOneBasedIndex: false,
+
+        // Flags if we should monitor the hash and change slides accordingly
+        respondToHashChanges: true,
+
+        // Push each slide change to the browser history
+        history: true,
+
+        // Enable keyboard shortcuts for navigation
+        keyboard: true,
+
+        // Enable the slide overview mode
+        overview: true,
+
+        // Disables the default reveal.js slide layout (scaling and centering)
+        // so that you can use custom CSS layout
+        disableLayout: false,
+
+        // Vertical centering of slides
+        center: false,
+
+        // Enables touch navigation on devices with touch input
+        touch: true,
+
+        // Loop the presentation
+        loop: false,
+
+        // Change the presentation direction to be RTL
+        rtl: false,
+
+        // see https://revealjs.com/vertical-slides/#navigation-mode
+        navigationMode: 'linear',
+
+        // Randomizes the order of slides each time the presentation loads
+        shuffle: false,
+
+        // Turns fragments on and off globally
+        fragments: true,
+
+        // Flags whether to include the current fragment in the URL,
+        // so that reloading brings you to the same fragment position
+        fragmentInURL: false,
+
+        // Flags if the presentation is running in an embedded mode,
+        // i.e. contained within a limited portion of the screen
+        embedded: false,
+
+        // Flags if we should show a help overlay when the questionmark
+        // key is pressed
+        help: true,
+
+        // Flags if it should be possible to pause the presentation (blackout)
+        pause: true,
+
+        // Flags if speaker notes should be visible to all viewers
+        showNotes: false,
+
+        // Global override for autoplaying embedded media (null/true/false)
+        autoPlayMedia: null,
+
+        // Global override for preloading lazy-loaded iframes (null/true/false)
+        preloadIframes: null,
+
+        // Number of milliseconds between automatically proceeding to the
+        // next slide, disabled when set to 0, this value can be overwritten
+        // by using a data-autoslide attribute on your slides
+        autoSlide: 0,
+
+        // Stop auto-sliding after user input
+        autoSlideStoppable: true,
+
+        // Use this method for navigation when auto-sliding
+        autoSlideMethod: null,
+
+        // Specify the average time in seconds that you think you will spend
+        // presenting each slide. This is used to show a pacing timer in the
+        // speaker view
+        defaultTiming: null,
+
+        // Enable slide navigation via mouse wheel
+        mouseWheel: false,
+
+        // The display mode that will be used to show slides
+        display: 'block',
+
+        // Hide cursor if inactive
+        hideInactiveCursor: true,
+
+        // Time before the cursor is hidden (in ms)
+        hideCursorTime: 5000,
+
+        // Opens links in an iframe preview overlay
+        previewLinks: false,
+
+        // Transition style (none/fade/slide/convex/concave/zoom)
+        transition: 'none',
+
+        // Transition speed (default/fast/slow)
+        transitionSpeed: 'default',
+
+        // Transition style for full page slide backgrounds
+        // (none/fade/slide/convex/concave/zoom)
+        backgroundTransition: 'none',
+
+        // Number of slides away from the current that are visible
+        viewDistance: 3,
+
+        // Number of slides away from the current that are visible on mobile
+        // devices. It is advisable to set this to a lower number than
+        // viewDistance in order to save resources.
+        mobileViewDistance: 2,
+
+        // The "normal" size of the presentation, aspect ratio will be preserved
+        // when the presentation is scaled to fit different resolutions. Can be
+        // specified using percentage units.
+        width: 1050,
+
+        height: 700,
+
+        // Factor of the display size that should remain empty around the content
+        margin: 0.1,
+
+        math: {
+          mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js',
+          config: 'TeX-AMS_HTML-full',
+          tex2jax: {
+            inlineMath: [['\\(','\\)']],
+            displayMath: [['\\[','\\]']],
+            balanceBraces: true,
+            processEscapes: false,
+            processRefs: true,
+            processEnvironments: true,
+            preview: 'TeX',
+            skipTags: ['script','noscript','style','textarea','pre','code'],
+            ignoreClass: 'tex2jax_ignore',
+            processClass: 'tex2jax_process'
+          },
+        },
+
+        // reveal.js plugins
+        plugins: [QuartoLineHighlight, PdfExport, RevealMenu, RevealPointer, QuartoSupport,
+
+          RevealMath,
+          RevealNotes,
+          RevealSearch,
+          RevealZoom
+        ]
+      });
+    </script>
+    <script id="quarto-html-after-body" type="application/javascript">
+    window.document.addEventListener("DOMContentLoaded", function (event) {
+      const toggleBodyColorMode = (bsSheetEl) => {
+        const mode = bsSheetEl.getAttribute("data-mode");
+        const bodyEl = window.document.querySelector("body");
+        if (mode === "dark") {
+          bodyEl.classList.add("quarto-dark");
+          bodyEl.classList.remove("quarto-light");
+        } else {
+          bodyEl.classList.add("quarto-light");
+          bodyEl.classList.remove("quarto-dark");
+        }
+      }
+      const toggleBodyColorPrimary = () => {
+        const bsSheetEl = window.document.querySelector("link#quarto-bootstrap");
+        if (bsSheetEl) {
+          toggleBodyColorMode(bsSheetEl);
+        }
+      }
+      toggleBodyColorPrimary();  
+      const tabsets =  window.document.querySelectorAll(".panel-tabset-tabby")
+      tabsets.forEach(function(tabset) {
+        const tabby = new Tabby('#' + tabset.id);
+      });
+      const isCodeAnnotation = (el) => {
+        for (const clz of el.classList) {
+          if (clz.startsWith('code-annotation-')) {                     
+            return true;
+          }
+        }
+        return false;
+      }
+      const clipboard = new window.ClipboardJS('.code-copy-button', {
+        text: function(trigger) {
+          const codeEl = trigger.previousElementSibling.cloneNode(true);
+          for (const childEl of codeEl.children) {
+            if (isCodeAnnotation(childEl)) {
+              childEl.remove();
+            }
+          }
+          return codeEl.innerText;
+        }
+      });
+      clipboard.on('success', function(e) {
+        // button target
+        const button = e.trigger;
+        // don't keep focus
+        button.blur();
+        // flash "checked"
+        button.classList.add('code-copy-button-checked');
+        var currentTitle = button.getAttribute("title");
+        button.setAttribute("title", "Copied!");
+        let tooltip;
+        if (window.bootstrap) {
+          button.setAttribute("data-bs-toggle", "tooltip");
+          button.setAttribute("data-bs-placement", "left");
+          button.setAttribute("data-bs-title", "Copied!");
+          tooltip = new bootstrap.Tooltip(button, 
+            { trigger: "manual", 
+              customClass: "code-copy-button-tooltip",
+              offset: [0, -8]});
+          tooltip.show();    
+        }
+        setTimeout(function() {
+          if (tooltip) {
+            tooltip.hide();
+            button.removeAttribute("data-bs-title");
+            button.removeAttribute("data-bs-toggle");
+            button.removeAttribute("data-bs-placement");
+          }
+          button.setAttribute("title", currentTitle);
+          button.classList.remove('code-copy-button-checked');
+        }, 1000);
+        // clear code selection
+        e.clearSelection();
+      });
+      function tippyHover(el, contentFn) {
+        const config = {
+          allowHTML: true,
+          content: contentFn,
+          maxWidth: 500,
+          delay: 100,
+          arrow: false,
+          appendTo: function(el) {
+              return el.closest('section.slide') || el.parentElement;
+          },
+          interactive: true,
+          interactiveBorder: 10,
+          theme: 'light-border',
+          placement: 'bottom-start'
+        };
+          config['offset'] = [0,0];
+          config['maxWidth'] = 700;
+        window.tippy(el, config); 
+      }
+      const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
+      for (var i=0; i<noterefs.length; i++) {
+        const ref = noterefs[i];
+        tippyHover(ref, function() {
+          // use id or data attribute instead here
+          let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
+          try { href = new URL(href).hash; } catch {}
+          const id = href.replace(/^#\/?/, "");
+          const note = window.document.getElementById(id);
+          return note.innerHTML;
+        });
+      }
+      const findCites = (el) => {
+        const parentEl = el.parentElement;
+        if (parentEl) {
+          const cites = parentEl.dataset.cites;
+          if (cites) {
+            return {
+              el,
+              cites: cites.split(' ')
+            };
+          } else {
+            return findCites(el.parentElement)
+          }
+        } else {
+          return undefined;
+        }
+      };
+      var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
+      for (var i=0; i<bibliorefs.length; i++) {
+        const ref = bibliorefs[i];
+        const citeInfo = findCites(ref);
+        if (citeInfo) {
+          tippyHover(citeInfo.el, function() {
+            var popup = window.document.createElement('div');
+            citeInfo.cites.forEach(function(cite) {
+              var citeDiv = window.document.createElement('div');
+              citeDiv.classList.add('hanging-indent');
+              citeDiv.classList.add('csl-entry');
+              var biblioDiv = window.document.getElementById('ref-' + cite);
+              if (biblioDiv) {
+                citeDiv.innerHTML = biblioDiv.innerHTML;
+              }
+              popup.appendChild(citeDiv);
+            });
+            return popup.innerHTML;
+          });
+        }
+      }
+    });
+    </script>
+    
+
+</body></html>
\ No newline at end of file