# Verification report — AMR-096-0015 (Aldous's conjecture on excursion lengths of a uniform Eulerian circuit of the complete graph)

Verification date: 2026-09-30 (revised the same day after a third independent referee report on the present version).

**Verdict.** The conjecture holds exactly in the range i = o(n^{3/2}) and fails beyond it. Let N_i be the number of
length-i excursions from a fixed vertex in a uniform Eulerian circuit of the bidirected K_n. For i = i(n) ≥ 2,
E N_i ~ e^{−i/n} holds if and only if i = o(n^{3/2}). This range contains fixed i, the scale i ~ xn, and essentially all
excursions. More precisely:
- E N_i = exp(−i/n − i²/(2n³))(1 + O_K(n^{−1/2} log n)) uniformly in 2 ≤ i ≤ K n^{3/2};
- E N_i e^{i/n} → 0 when i/n^{3/2} → ∞;
- the length of a uniformly chosen excursion, divided by n, converges in distribution to Exp(1).

The literal reading "for all i" is false, but only at the scale n^{3/2} and beyond. The note is unrefereed.

## Statement checked
- **Primary source.** D. Aldous and J. Yu, "Random Eulerian circuits", Open Problems in Mathematics 2 (2014), 4 pp.,
  example (a) on p. 4 (sponsor P. Diaconis).
  - Two copies were read: the Wayback copy of opmath.org and Aldous's own copy
    (stat.berkeley.edu/~aldous/Papers/aldous_eulerian.pdf). The text is identical.
  - Setting: the complete n-vertex graph, with each edge replaced by two directed edges.
  - Wording: the natural conjecture is that "the expected number of length-i excursions is asymptotic to e^{−i/n}".
  - The source's aside "n excursions, each of mean length n − 1" is a slip. There are n − 1 excursions of mean length n,
    which does not matter asymptotically.
- **Aldous's open-problem index** (stat.berkeley.edu/~aldous/Research/OP/index.html). It lists the whole topic
  "Random Eulerian circuits". The "(2.2)" next to it is Aldous's rating on his conceptual–technical spectrum, not a
  problem number, and the index does not single out example (a).
- **Aldous's page on the topic** (stat.berkeley.edu/~aldous/Research/OP/euler.html, read by the third referee). It poses
  only the torus conjecture and says nothing about the complete graph.
- **Aldous's talks** of 6 April 2022 (Bristol) and 24 February 2023 (UCSB). Both pose the torus problem as open and say
  there is very little literature on uniform random Eulerian circuits. Neither mentions the complete graph.
- **Corpus record.** ulamai/UnsolvedMath v1.6.0, record AMR-096-0015, "Excursion counts in a random Eulerian circuit
  on a complete graph", status `open`. Its question is whether the expected number of length-i excursions is
  asymptotic to e^{−i/n}.

## Readings
| Reading | Answer | Where |
|---|---|---|
| For each fixed i ≥ 2, E N_i → 1 (= lim e^{−i/n}) | yes | Cor. 1.3(a) |
| For each fixed x > 0, E N_{⌈xn⌉} → e^{−x} (the natural scale) | yes | Cor. 1.3(a) |
| E N_i ~ e^{−i/n} for every sequence i = i(n) ≥ 2 with i = o(n^{3/2}), uniformly | yes | Thm 1.1, Cor. 1.3(a) |
| Distributional form: (length of a uniform excursion)/n → Exp(1) | yes, with Kolmogorov distance O(n^{−1/2} log n) | Cor. 1.3(c) |
| E N_i ~ e^{−i/n} uniformly over all i ≥ 2 (literal) | no; at i ~ y n^{3/2} the ratio tends to e^{−y²/2}, and to 0 when i/n^{3/2} → ∞ | Thm 1.1, Thm 1.2 |
| i = 1 | trivially excluded (N_1 = 0: no loops) | Intro |

## Results in the paper
- **Lemmas 2.1–2.4 (exact representation).**
  - E N_i = (n − 1) P(τ = i), where τ is the first-excursion length of a uniform rooted circuit.
  - A uniform rooted circuit is generated by the Kandel–Matias–Unger–Winkler walk (BEST theorem).
  - At the j-th visit of w before τ, the walk returns to v with hazard 1{w ∉ A}/(n − 1 − j). The case j = n − 1 occurs
    only at w = X_1 ∈ A, with hazard 1.
  - A change of measure to an auxiliary walk that avoids v, with absorbed paths handled explicitly, gives
    E N_i = (n − 1) μ[W_i] (formula (2)).
- **Remark 2.5.** An independent exact formula via BEST and the directed matrix-tree theorem, used as a check.
- **Remark 2.6.** Closed forms E N_2 = (n − 1)/n and E N_3 = (n − 1)(n² − 3n + 3)/(n²(n − 2)), checked against the exact
  values for 3 ≤ n ≤ 6.
- **Lemmas 3.1–3.4.**
  - Landing probabilities.
  - Visit counts, via a stopped exponential supermartingale.
  - The root degree: C − 1 ~ Bin(n − 2, 1/n).
  - The deterministic convexity bound S_i ≥ f(m), with inequality (3).
- **Theorem 1.1.** For every K, |E N_i exp(i/n + i²/(2n³)) − 1| ≤ C_K n^{−1/2} log n for 2 ≤ i ≤ K n^{3/2}.
- **Theorem 1.2.** For n ≥ 23 and all i ≥ 2, E N_i ≤ e^{−i/n}(12 e^{−(i−2)²/(2n³)} + ε_n) with an explicit ε_n → 0.
  - The constants are not optimized. By a numerical evaluation, ε_n < 1 only for n ≳ 5.9·10^5, so the theorem is
    asymptotic in content.
- **Corollary 1.3.**
  - (a) The limit e^{−y²/2}, and the "if and only if i = o(n^{3/2})".
  - (b) Σ_i |E N_i − e^{−i/n}| = O(n^{1/2} log n). This uses only Theorem 1.1 and Σ_i E N_i = n − 1.
  - (c) Λ_n/n → Exp(1), with E Λ_n = n.

## Computations (scripts and outputs in reproducibility/)
Exact computations are sanity checks; the proofs are not computer-assisted. All Eulerian circuits were enumerated only
for n ≤ 5. For n = 6 (about 2.5·10^11 circuits) the exact values come from the formula of Remark 2.5, cross-checked by
floating-point dynamic programs for the walk and for the hazard form.
- **Finder** (`claimant/`).
  - `exact_small.py` enumerates all 256 (n = 4) and 972,000 (n = 5) Eulerian circuits, in exact rationals.
  - It checks them against two independent dynamic programs, one for the tree walk and one for the hazard identity,
    over all n^{n−2} trees. All values agree; for example E N_5 = 1624/3375 at n = 5.
  - `is_mc.c` is an unbiased importance sampler based on formula (2), run for n = 5 … 6400 (TESTED). It produces the
    table of Section 7 via `tables.py`.
- **Referee 1** (`referee/referee1/`, independent code, 2026-09-29).
  - `direct_sim.c`: full uniform circuits with Aldous–Broder trees. It matches the exact n = 5 values (|z| ≤ 1.5) and
    the finder's sampler at n = 60.
  - `is_mine.c`: an independent importance sampler with Aldous–Broder trees. It reproduces the table for
    n = 400, 1600, 6400.
- **Referee 2** (`referee/referee2/`, independent code, written before reading the finder's scripts, 2026-09-30).
  - `bf.c`: brute force for n = 3, 4, 5, counting excursions from every vertex.
  - `best.c`: the formula of Remark 2.5 in exact integer arithmetic for n = 3 … 6. It agrees with the brute force for
    n ≤ 5 and gives the exact n = 6 values, e.g. E N_2..E N_5 = 5/6, 35/48, 5/8, 7405/13824, with Σ E N_i = 5 and
    Σ i E N_i = 30.
  - `hz_exact.c`: for n = 4, 5, 6, over all trees, dynamic programs for the literal walk and for the hazard form. They
    agree with best.c to within 2·10^{−12}. At every state they check the hazard formula (1), the count of used
    out-arcs, and that j = n − 1 occurs only at X_1.
  - `direct_mc.c`: full circuits with Wilson trees, validated at n = 6 (`d6.txt`), run at n = 100 and 200.
  - `is_mine.c`: an importance sampler with Wilson trees, validated at n = 6 (`is6.txt`), run at n = 400, 1600, 6400.
- **Referee 3** (`referee/referee3/`, 2026-09-30; independent code, written and run before any finder or earlier
  referee script was opened; checked the present version). Its files are headed "Referee 2", the number of its report
  in the audit sequence.
  - `r2_brute.c`: plain depth-first search over all Eulerian circuits for n = 3, 4, 5 (3, 256 and 972,000 circuits),
    with excursions from every root. All roots give identical counts, Σ N = n − 1 and Σ i N = n(n − 1).
  - `r2_exact.py`: exact rationals over all trees for n = 3, 4, 5. The literal walk is checked against Lemma 2.3
    (i)–(iii) and formula (1), using the true transition law, at every reachable state (12, 468 and 176,600 states).
    Lemma 2.4 holds exactly for every tree and every i, and (n − 1)P(τ = i) equals the brute force. It also checks
    Remark 2.6 and E C, E D_2 for n ≤ 8.
  - `r2_best.c`: Remark 2.5 in exact integer arithmetic for n = 3 … 6. It equals the brute force for n ≤ 5, and its
    n = 6 values are identical to referee 2's `best6.out`.
  - `r2_walk6.c`: for n = 6, the literal and auxiliary walks for one tree from each of the 20 isomorphism classes of
    trees rooted at v (class sizes sum to 1296), 2.0·10^8 states, no violation of Lemma 2.3. The class-weighted values
    agree with the exact ones to 4·10^{−13}.
  - `r2_constants.py`: every constant of Sections 3–6; inequality (3) exactly in all 2,421,006 cases with n ≤ 30;
    ε_n ≥ 1 at n = 590,086 and ε_n < 1 for 590,086 < n ≤ 5·10^6; a randomized test of S_i ≥ f(m) (Lemma 3.4) on
    515,896 cases with 4 ≤ n ≤ 25, without a violation.
  - `r2_is.c` (TESTED): an importance sampler with Prüfer trees, validated at n = 5, 6 with 2·10^7 samples
    (χ²/dof 0.90 and 0.96). It reproduces every entry of Table 1 to within rounding and about two standard errors, and
    gives Σ_i |E N_i − e^{−i/n}| = 2.16, 2.17 and 2.18 at n = 100, 400 and 1600 (upward-biased by the noise).
  - `r2_direct.c` (TESTED): full uniform circuits with Aldous–Broder trees, validated at n = 5, 6. At n = 100
    (4·10^6 circuits) and n = 60 (2·10^6 circuits) it agrees with the importance sampler on identical windows for
    y ≤ 1.5.
  - `mc/deviation_analysis.txt` compares the deviation d = r/e^{−y²/2} − 1 with e^{−y³/(3√n)} − 1; this led to fix 1
    of the third verification.
  - It reran `exact_small.py 4` and `5`, referee 2's `bf 5`, `best 6` and `hz_exact 6`, and the lead's
    `exact_checks.py`; the outputs are byte-identical to the recorded files.
- **Lead** (`lead/`, 2026-09-30).
  - `exact_checks.py` cross-checks all exact outputs as rationals. It covers the finder vs referee brute force vs BEST,
    the floating-point DPs, the closed forms of Remark 2.6, and E C, E D_2 by enumerating all trees for n ≤ 8.
  - `check_constants.py` checks every constant and elementary inequality of Sections 3–5, in exact rational arithmetic
    on finite ranges. Examples: inequality (3) for all n ≤ 30, i ≤ n(n − 1) and c' ≤ i − 2; E e^{C/8} ≤ 1.2946;
    2e^{1.5}·1.2946 < 12; the Range II thresholds. It also evaluates ε_n and finds ε_n < 1 from n ≈ 5.9·10^5 on.
    (Since the revision it names the inequality "(3)", as the paper does, instead of "(3.2)"; the regenerated output
    differs from the earlier one only in that label.)
  - `corollary_mc.py` (TESTED) computes Σ_i |E N_i − e^{−i/n}| ≈ 2.16 (n = 100) and ≈ 2.18 (n = 400) from full-range
    importance-sampling runs.
  - `deviation_check.py` (TESTED, new in the revision) checks the corrected first bullet of Section 7 against the
    finder's unrounded estimates (`claimant/tables.out`) and referee 3's estimates. Both data sets give the same
    conclusions: d > 0 for y ≤ 1 and d < 0 for y ≥ 1.5 at every n; at y = 1.5 the term −y³/(3√n) is more than twice
    the deviation for n ≥ 400; for y = 2, 3 the two agree within a factor 1.6.
  - The lead also reran every finder and referee exact program, and they reproduced their recorded outputs
    byte-for-byte.

## Independent adversarial audit
Three independent verifications: round 3 (2026-09-29), a second one for the paper stage (2026-09-30), and a referee
report on the present version (2026-09-30). The first two classified the claim as PAPER_CANDIDATE, correct, and
answering the question as intended. The third found no mathematical error and no prior publication.

### First and second verifications

| Item | Verdict |
|---|---|
| Statement fidelity | CONFIRMED (source read directly by both verifiers) |
| Proofs | CONFIRMED (both checked every lemma and theorem line by line; no mathematical error) |
| Computations | CONFIRMED (all finder outputs reproduced byte-for-byte; independent exact and Monte Carlo code agrees) |
| Answer as posed | CONFIRMED (proved in the intended sense; literal "all i" reading false only beyond n^{3/2}) |
| Novelty | CONFIRMED as far as can be checked (no priority claim) |
| Presentation | CONFIRMED_WITH_FIXES |

All required fixes were applied:
1. Full proof of the visit-count lemma. It now covers the stopped supermartingale, the first step
   (P(X_1 = u) = 1/(n − 1) ≤ q), absorbed paths, and the inclusion G ⊆ {M_{N−1} ≤ L} with N = i − 2 (Lemma 3.2, §4).
2. Lemma 2.3(iii): if X_1 ∉ A, the walk returns to v at the (n − 2)-th visit of X_1, so j = n − 1 occurs only when
   X_1 ∈ A.
3. Theorem 1.2 is stated for all n ≥ 23 with an explicit ε_n, and the text says that ε_n < 1 only for n ≳ 5.9·10^5.
4. The distributional corollary was added (Cor. 1.3(b), (c)).
5. The error rate and the numerics:
   - "for i = xn the ratio is 1 + O(1/n)" is now labelled a numerical observation;
   - the numerics suggest an error of order n^{−1/2} at fixed y (a numerical observation). The remark added at this
     stage, that the next term −y³/(3√n) accounts for most of the deviation, was false for y ≤ 1.5. It was corrected
     after the third verification (fix 1 below): for y ≤ 1 the deviation is positive, and the term is of the same size
     as the deviation only for y ≥ 2;
   - all Monte Carlo results are labelled TESTED.
6. The "(2.2)" wording and the scope of Aldous's index were corrected.
7. Optional: the BEST + matrix-tree formula and the exact n = 6 values were added (Remark 2.5, §7).
8. Literature:
   - the six arXiv queries that had returned HTTP 429 were repeated successfully, and six new ones were run;
   - the citation search on Aldous–Yu 2014 was attempted again via OpenAlex and Semantic Scholar (see below);
   - one web search was made for citing works.

**One change beyond the fixes.** In the proof of Theorem 1.1 the cut-off L = ⌊n^{3/4}⌋ was replaced by
L = ⌈√n log n⌉, which improves the error from O(n^{−1/4}) to O(n^{−1/2} log n). The argument is unchanged, and all error
terms were rederived by the lead:
- μ(G^c) ≤ n e^{−2√n log n};
- αq = n^{−3}(1 + O(L/n));
- the lower-bound terms e^{−7K n^{−1/2}} and 1 − 5/n;
- the upper-bound factors (1 + 2L/n) e^{27K n^{−1/2} + 2L/n}.

The first two verifiers checked the n^{−1/4} version. The third verification checked the present version line by line,
including every error term above, and found no error.

### Third verification (referee report on the present version, 2026-09-30)
The referee checked every lemma, theorem and the corollary line by line in the present version (L = ⌈√n log n⌉) and
rederived every error term of Section 4. Its code (written before any earlier script was opened) reproduced all exact
values for n ≤ 6 and every entry of Table 1; see Computations above.

| Item | Verdict |
|---|---|
| Statement fidelity | CONFIRMED (source fetched anonymously in two copies with identical text; the corpus record matches) |
| Proofs | CONFIRMED (every proof checked line by line in the present version; no mathematical error, no gap) |
| Computations | CONFIRMED, WITH ONE FALSE NUMERICAL REMARK (all exact values and all Table 1 entries reproduced by independent code; one observation in Section 7 contradicted by the data; two descriptions overstated what was computed) |
| Novelty | NO PRIOR PUBLICATION FOUND (the citation-search statement was out of date; two works named by the verifiers were not credited) |
| Presentation | MINOR FIXES REQUIRED (house style, metadata, build, layout and the release package conform) |
| Fatal | No |

All eight required fixes were applied:
1. Section 7, first bullet. The claim that −y³/(3√n) "accounts for most of the deviation" was replaced by a numerical
   observation: the deviation d = r/e^{−y²/2} − 1 behaves like c(y)/√n; for y ≤ 1 it is positive at every n (about
   +0.002 at n = 6400), so c(y) > 0 there; the term −y³/(3√n) has the wrong sign for y ≤ 1, is more than twice the
   deviation at y = 1.5 for n ≥ 400, and is of the same size (within a factor of about 1.6) only for y ≥ 2. The same
   correction was made in item 5 above and in RESULT.md §4. It is checked by `lead/deviation_check.py`.
2. Section 7 ("Exact values" and the opening sentence) and Remark 2.6. The paper now says that all circuits were
   enumerated only for n ≤ 5, and that the n = 6 values come from the exact formula of Remark 2.5, cross-checked by the
   walk and hazard programs. Remark 2.6 now says that both values "agree with the exact values of Section 7".
3. Scope and priority, and this report. The citation-search statement was updated: OpenAlex (autocomplete,
   `works/W1592715806`, `filter=cites:`, 2026-09-30) indexes Aldous–Yu 2014 with 0 citing works, and Semantic Scholar
   stayed rate-limited. The caveat that the record is a poorly linked CiteSeerX item was kept.
4. Credit. Hu–Lyons–Tang, "A reverse Aldous–Broder algorithm", Ann. Inst. H. Poincaré Probab. Statist. 57(2) (2021)
   890–900, doi:10.1214/20-AIHP1101, and Farrell–Levine, "Multi-Eulerian tours of directed graphs", Electron. J.
   Combin. 23(2) (2016) P2.21, doi:10.37236/5588, are now cited in the introduction and in the related-work sentence.
5. References.
   - Poghosyan–Priezzhev: now the journal version, J. Stat. Mech. Theory Exp. 2014(6) P06003,
     doi:10.1088/1742-5468/2014/06/P06003, with the arXiv id kept.
   - Le Jan: verified to be the journal version of arXiv:1405.2879. The v2 PDF of that preprint (23 Dec 2014) is titled
     "Markov Loops, Free Field and Eulerian Networks" and has the journal abstract, although the arXiv listing keeps the
     title "Markov loops, complex free field and Eulerian circuits". The paper now cites J. Math. Soc. Japan 67(4)
     (2015) 1671–1680, doi:10.2969/jmsj/06741671, with the arXiv id.
6. Verification paragraph (items 3–6) and this report. They now record that the present version (L = ⌈√n log n⌉) has
   been checked line by line by an independent referee, and that independent code reproduced all exact values
   (n ≤ 6) and Table 1. The referee's scripts and outputs were added as `reproducibility/referee/referee3/`, with README
   rows. (The folder is named referee3 because `referee/referee2/` already holds the second verifier's code.)
7. Section 7, direct simulation. The values 0.991, 0.909, 0.616 and 0.306 are now described as averages of
   E N_i e^{i/n} over |i − y n^{3/2}| ≤ 20, pooled over the excursions from all 100 roots; the y = 1.5 value rests on
   3094 excursions and has standard error about 0.006.
8. Release consistency. `lead/check_constants.py` and its output now call the inequality "(3)". paper.pdf, source.zip
   and the zenodo/ copies were rebuilt, and the sha256, md5 and sizes in ZENODO_METADATA.md were updated. The Zenodo
   description follows the revised abstract.

Optional suggestions:
- Applied: 9 (the abstract now says that exact computations for n ≤ 6 confirm the hazard representation and the closed
  forms for E N_2 and E N_3, and that Monte Carlo simulations up to n = 6400 are consistent with the asymptotic
  results); 11, first part (a lead-in sentence before the list in Corollary 1.3); 12 (Aldous's euler.html page and
  Sawada–Gabrić, arXiv:2510.16545, are cited); 13 (the standard-error caveat is in the reproducibility README).
- Also applied: the two optional wording points on the proofs (O_s is used only when h_s < 1, so j_s ≤ n − 2; P is
  defined when X̃_1, …, X̃_{i−2} ∈ U, in particular on G).
- Not applied: 10 (the title keeps "Aldous's", which the referee allowed, since Aldous is listed as the proposer) and
  the standard label "[Prü18]" of suggestion 11. Tectonic's BibTeX hangs on the four encodings of "Prüfer" that would
  produce that label, and UTF-8 input gives a broken label, so the label stays "[Prüfer18]".

## Relation to the literature, novelty and scope
- **Searches** (finder 2026-09-29, three verifiers, lead 2026-09-30; every request logged in `queries.log`, anonymous,
  no personal data).
  - arXiv API: "random/uniform Eulerian", "Eulerian circuit(s)" with excursion, random, spanning tree, complete graph;
    "Euler tour(s)" with random, excursion, complete graph; BEST theorem with random; Aldous with Eulerian;
    Eulerian in math.PR titles.
  - Crossref, zbMATH, Aldous's web pages, and one web search each by the finder, both verifiers and the lead.
  - The third verifier added 11 arXiv queries and an id-list query (including random de Bruijn sequences and universal
    cycles, the equivalent reading as gaps between occurrences of a symbol), 22 Crossref lookups, 2 zbMATH queries,
    the OpenAlex endpoints below, Semantic Scholar and one web search.
  - Hits concern counting (McKay–Robinson 1998; Isaev 2011, 2013; Creed–Cryan 2013), sampling
    (Kandel–Matias–Unger–Winkler 1996; Tetali–Vempala 2001; Anari 2026; Sawada–Gabrić 2025, uniform universal cycles
    and de Bruijn sequences via random arborescences), the last-exit-tree bijection (Hu–Lyons–Tang 2021),
    multi-Eulerian tours (Farrell–Levine 2016), rotor-router walks (Poghosyan–Priezzhev 2014) and Markov loops
    (Le Jan 2015). None concerns excursion lengths. All of them are cited in the paper; Hu–Lyons–Tang, Farrell–Levine
    and Sawada–Gabrić were added in the revision after the third verification.
  - OpenAlex and Semantic Scholar (the citation search on Aldous–Yu 2014): see the final paragraph of this section.
- **Novelty.** No prior result on excursion lengths of uniform Eulerian circuits of K_n was found, and no statement of
  the correction factor e^{−i²/(2n³)} or of the n^{3/2} threshold. This negative search is not a proof of priority.
- **Scope.**
  - The note settles example (a) of Aldous–Yu 2014 in the sense stated above.
  - Still open: the main torus conjecture of that article, its d = 2 variant, and example (b) on the Hamming cube.
  - Also open: the second-order term, and the precise behaviour of E N_i for n^{3/2} ≪ i ≤ n(n − 1). Theorem 1.2 gives
    only an upper bound there.

- **Citation search on Aldous–Yu 2014.**
  - Semantic Scholar returned HTTP 429 (rate limit) in all attempts: once by verifier 2, three times by the lead on
    2026-09-29/30, and twice by the third verifier.
  - The OpenAlex search endpoints returned HTTP 429 (anonymous daily budget exhausted) to the finder, to verifier 2,
    to the lead and to the third verifier, and HTTP 503 three times to the lead ("anonymous search is paused while the
    search cluster recovers").
  - Other OpenAlex endpoints answered (third verifier, 2026-09-30; rechecked by the lead in the revision). Autocomplete
    finds Aldous–Yu 2014 as W1592715806, a CiteSeerX-derived record without a DOI. `works/W1592715806` gives
    cited_by_count 0, and `works?filter=cites:W1592715806` returns 0 works. The record is poorly linked, so this count
    may be incomplete.
  - The Aldous–Yu article has no DOI, so Crossref and OpenCitations cannot list its citations.
  - A web search for works citing it (2026-09-30) found only Aldous's own pages, McKay–Robinson, Farrell–Levine and
    Anari. None concerns excursion lengths.
  - The paper now states the OpenAlex result, with this caveat, instead of saying that no systematic citation search
    was possible. A Semantic Scholar search with an API key would still be useful.

## Public release and license
This paper, its source files, and this verification report are licensed under the Creative Commons Attribution
4.0 International License (CC BY 4.0): https://creativecommons.org/licenses/by/4.0/
