Odds Generation — soccer · goal · regular · DIBP
A comparison candidate to the default page, proposed (2026-07-16, pending team approval — ADR-029 addenda) to replace it: on two disjoint live-Saba samples (59 + 124 real prematch Correct Score boards) this engine is unbiased at 0-0 where the λ₃ shock over-prices it by ≈ e^λ₃, fits the 1X2 draw exactly, and has the best per-cell CS error of the draw-lifted engines; ω = 1 held on both samples. Steps 1–3 are identical — strip the margins, back-solve the goal rates (λₕ, λₐ) from the hard Handicap and Total anchors, plus, in live, the same current score input (default 0-0) — and step 4 extends the default page's common shock λ₃ into the diagonal-inflated bivariate Poisson (Karlis–Ntzoufras 2005):
J = (1 − θ) · BP(l₁, l₂, λ₃) + θ · D(ω)
The independent-Poisson grid gains a common-shock coupling λ₃ and a slug of diagonal probability θ·D(ω), where D(ω) is a geometric distribution over the draw cells starting at 1-1 (1-1, 2-2, 3-3, …) with a fixed decay ω you set — never fitted (ω < 1 decays from 1-1, ω = 1 is uniform, ω > 1 leans toward the high diagonal). 0-0 deliberately takes no injection: measured against Saba's own Correct Score boards (59 real prematch matches, 2026-07-16), books price 0-0 at the independent-Poisson level and keep their draw surplus in the mid/high diagonal — a 0-0 share only ever over-prices that cell (ADR-029 addendum). The two fitted knobs are (λ₃, θ), and after every trial the engine re-solves (λₕ, λₐ) so the Handicap and Total still hold exactly.
Live. The same remaining-goals frame as the default page: Handicap rest-of-match, the absolute Total line drops by the goals already scored, final-result markets settle on current + remaining. The difference is step 4's live reach — D(ω) follows the final-score diagonal: live it injects on the band h − a = d (each final draw k-k keeps its ω^(k−1) weight; final 0-0 stays exempt), so the θ pull keeps fitting while a side leads, where the default page's centred-diagonal λ₃ shock greys its 1X2 out. λ₃ itself still reaches the draw only through the Total trade, which concentrates the centred cells — off level it loses most of its grip and the fit usually defers to the θ-only solve. At 0-0 the pipeline is byte-identical to prematch.
The mechanism has sharp limits, and the walkthrough narrates them. Both knobs are
draw-directional and one-sided: θ injects diagonal mass head-on, while λ₃ reaches the
draw only sideways — the common shock cancels in the goal margin (X − Y = W₁ − W₂), so
λ₃ moves the 1X2 only by trading against the Total (a higher λ₃ forces a lower-scoring,
more draw-heavy match). Neither is a structural home:away lever the way the
φ/σ candidate's σ is: at the common ±0.50-class
Handicap the anchor already pins P(h > a) — the 1X2 home event — so the two knobs
collapse onto one direction and the fit defers to a θ-only draw
solve, a more fundamental rank collapse than the φ/σ candidate's. At a deeper line the home leg
frees up and Gauss–Newton engages λ₃ as well. And because the whole diagonal is one 1X2
outcome, ω is unidentifiable from the 1X2: move it and the fitted 1X2 holds while Correct
Score and Exact Total visibly reshape — the diagonal's shape is imposed by ω rather than
inherited from the baseline grid.
See also the sibling φ/σ-tilt candidate; the default page keeps the common shock but drops the diagonal inflation.
Each period — full match, 1st half, 2nd half — is its own inversion. Timing and cross-half markets (HT/FT, First Goal, …) are out of scope; see the Markets reference.
↑/↓ steps a field, Shift steps bigger; on a Malay pair the partner moves the opposite way. Handicap/Total boards show 16 lines in quarter steps around your line; team-total, 3-way and which-team lines are illustrative — probabilities are exact given λ.
Valid inputs: Malay in [−1, +1] and never 0, 1X2 decimals above 1, and each book must carry margin (implied probabilities summing over 1). The score is whole goals (0-0 = prematch); in live enter the quotes as the book states them — Handicap rest-of-match, Total absolute (its line must sit above the current total), 1X2 on the final result. The (λ₃, θ) pull keeps fitting at any score — θ's injection follows the final-score diagonal — with no level-score gate (the default page's λ₃-only shock has one; step 4 compares).
Score grid
| A=0 | A=1 | A=2 | A=3 | A=4 | A=5+ | |
|---|---|---|---|---|---|---|
| H=0 | 6.90 | 7.35 | 3.91 | 1.39 | 0.37 | 0.10 |
| H=1 | 11.10 | 11.82 | 6.29 | 2.23 | 0.60 | 0.15 |
| H=2 | 8.93 | 9.51 | 5.06 | 1.80 | 0.48 | 0.12 |
| H=3 | 4.79 | 5.10 | 2.72 | 0.96 | 0.26 | 0.07 |
| H=4 | 1.93 | 2.05 | 1.09 | 0.39 | 0.10 | 0.03 |
| H=5+ | 0.83 | 0.89 | 0.47 | 0.17 | 0.04 | 0.01 |
| A=0 | A=1 | A=2 | A=3 | A=4 | A=5+ | |
|---|---|---|---|---|---|---|
| H=0 | 7.03 | 6.56 | 3.06 | 0.95 | 0.22 | 0.05 |
| H=1 | 11.56 | 12.29 | 5.03 | 1.57 | 0.37 | 0.08 |
| H=2 | 9.50 | 8.86 | 5.64 | 1.29 | 0.30 | 0.07 |
| H=3 | 5.20 | 4.85 | 2.27 | 2.20 | 0.16 | 0.04 |
| H=4 | 2.14 | 1.99 | 0.93 | 0.29 | 1.57 | 0.01 |
| H=5+ | 0.95 | 0.89 | 0.41 | 0.13 | 0.03 | 1.51 |
Markets
| HDP | -2/2.5 | -2.0 | -1.5/2 | -1.5 | -1/1.5 | -1.0 | -0.5/1 | -0.5 | -0/0.5 | 0.0 | +0/0.5 | +0.5 | +0.5/1 | +1.0 | +1/1.5 | +1.5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| H | -0.20 | -0.22 | -0.32 | -0.42 | -0.49 | -0.59 | -0.81 | +0.96 | +0.66 | +0.37 | +0.28 | +0.22 | +0.14 | +0.07 | +0.06 | +0.06 |
| A | +0.12 | +0.14 | +0.24 | +0.34 | +0.41 | +0.51 | +0.73 | +0.96 | -0.74 | -0.45 | -0.36 | -0.30 | -0.22 | -0.15 | -0.14 | -0.14 |
| Goal | 0.5/1 | 1.0 | 1/1.5 | 1.5 | 1.5/2 | 2.0 | 2/2.5 | 2.5 | 2.5/3 | 3.0 | 3/3.5 | 3.5 | 3.5/4 | 4.0 | 4/4.5 | 4.5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Over | +0.07 | +0.08 | +0.19 | +0.31 | +0.37 | +0.47 | +0.72 | +0.96 | -0.84 | -0.64 | -0.55 | -0.48 | -0.38 | -0.28 | -0.26 | -0.24 |
| Under | -0.15 | -0.16 | -0.27 | -0.39 | -0.45 | -0.55 | -0.80 | +0.96 | +0.76 | +0.56 | +0.47 | +0.40 | +0.30 | +0.20 | +0.18 | +0.16 |
| Outcome | Odds |
|---|---|
| Home | 1.960 |
| Draw | 3.064 |
| Away | 4.685 |
1 · Strip the bookmaker margins — Power (two-way) · Shin (three-way)
| Home | Away | |
|---|---|---|
| Malay quote | +0.96 | +0.96 |
| Decimal | 1.960000 | 1.960000 |
| Fair | 0.500000 | 0.500000 |
| Fair decimal | 2.000000 | 2.000000 |
| Over | Under | |
|---|---|---|
| Malay quote | +0.95 | +0.95 |
| Decimal | 1.950000 | 1.950000 |
| Fair | 0.500000 | 0.500000 |
| Fair decimal | 2.000000 | 2.000000 |
| Home | Draw | Away | |
|---|---|---|---|
| Decimal quote | 1.890000 | 3.130000 | 4.900000 |
| Fair (Shin) | 0.509241 | 0.302298 | 0.188461 |
| Fair decimal | 1.963708 | 3.307996 | 5.306125 |
Try the strips standalone — Margin — two-way (Power) · Margin — multi-way (Shin): the same math on any quotes, with the bisection narrated.
2 · Size — recover λ_total from the Total
Step 1 left two hard fair targets — Handicap and Total — for the scoring rates . The optional 1X2 is a soft shape target for λ₃ and θ in step 4, not a third hard rate constraint. Model each side’s goals as Poisson — — and independent. Independent Poissons add — — so the match total depends only on : the Total quote pins the match size on its own, before caring who scores (step 3’s job). Settling any line sorts that one total’s mass — point masses — into three buckets: win (over hits), mass ; lose, mass ; push (an exact tie, stake refunded), mass — so . A refund is a no-action bet, so the fair price conditions on the decided outcomes alone: . That makes size a one-dimensional root-find, laid out below in the order a solver runs it — target, search, then the evaluation every iteration repeats:
1 - exp(-x)*(1 + x + x^2/2) = 0.50000000A .5 line cannot push (), so this is the plain tail — the Poisson Calculator inverse-solves in one field.
Where the pasted expression comes from
Totals are whole numbers, so total carries mass . Each win tail runs on forever, so flip it to the complement — times the start of cut at the line (keep every term and , the whole distribution). For the 2.50 line:
Substitute (with the denominator is 1) into and write as exp(-x) — that is the pasted line, term for term; the calculator solves it for .
The evaluation the search repeats every iteration is that settlement rule under Poisson(λ). At the converged it reproduces the win mass , push mass , and the fair check back to the target — the figures a re-implementation should match:
(Additivity is exact only for the plain independent-Poisson grid, so this λ is the Poisson stage’s; step 4’s λ₃/θ diagonal inflation perturbs it, so that stage re-solves size and split jointly against the same hard targets — both recovered (l₁, l₂) pairs land in the per-stage table, step 4.)
3 · Split — recover λₕ and λₐ from the Handicap
The Handicap decides who scores them — and settling it needs the full scoreline distribution, the score grid: independence makes each cell a plain product of the two Poisson masses,
— exactly the grid the score-grid panel’s Poisson stage displays. Hold fixed and slide the home share (with ). Home covers ⟺ , an exact is a push — step 2’s one rule again, with the masses now read off the grid: and (½-weighted across a quarter line’s two components), fair cover probability — which rises with , so the same solver shape applies:
P(0, 2.674060-x)*Ptail(1, x) + P(1, 2.674060-x)*Ptail(2, x) + P(2, 2.674060-x)*Ptail(3, x) + P(3, 2.674060-x)*Ptail(4, x) + P(4, 2.674060-x)*Ptail(5, x) + P(5, 2.674060-x)*Ptail(6, x) = 0.50000000A .5 line cannot push (): each line is one away score — its Poisson mass times the home tail that covers it. Its search lands on — within of the grid solve above (why not exact: the away-corner fold, explained below).
Where the pasted expression comes from
Step 2's Total was a sum of the two goal counts (one rate, one Ptail); the Handicap turns on their difference — the goal margin (home goals minus away goals). A margin depends on both rates at once — its distribution is a Skellam, the difference of two Poissons — so no single Ptail in can express it. The trick is to condition on the away score : once is pinned, only the home goals still vary, and the cover collapses to one plain home tail (). Home covers (a half-line cannot push), so each away score contributes its Poisson mass times that tail:
This margin picture is λ₃-invariant within the BP part. Step 4’s common shock adds the same to both scores, so it cancels in the difference — — a Skellam in alone. The θ injection is the exception: its diagonal slug does sit in margin space (on the draw band), which is exactly why step 4 re-solves on the mixed grid — the anchors see the injection and trade against it, so they hold through the mixture.
Now substitute the search variable (with ) so the whole cover is one function of :
Truncating the away sum at N = 5 — the grid’s size — gives the pasted equation. At the solved the 6 terms evaluate and add straight up to the target ():
Why the pasted is only almost exactly the from the grid solve (): the grid is mass-complete, so almost all of the old truncation gap is gone — the home tail folds into the row, so for every away score the grid reproduces the closed-form home tail above exactly. The one remaining sliver is the away corner: the grid folds the mass onto the column as a cumulative bucket, while this closed-form paste keeps there as an exact point mass — and the margin mis-scores that folded corner. That corner is , and it shrinks with the away rate. The figure below shows the fold on the home side — its tail lands in the 5+ bucket, so no mass is lost; the away side folds the same way.
At the converged split the grid masses and the fair check are:
The recovered pair is the Poisson stage’s chips in the grid panel — and with it both quotes are reproduced exactly. That closes the fit, but not the model: the two quotes pinned just two numbers, size and split, while the market boards above price whole ladders off the grid’s shape — and that shape rests entirely on the independence assumption. The next step pulls that shape toward the 1X2 quote with the diagonal-inflated bivariate Poisson — θ (direct diagonal mass) and λ₃ (common shock, felt through the Total trade) — then re-solves so the quotes still hold (step 4).
4 · Pull the shape toward the 1X2 (λ₃ + θ diagonal inflation) — optional
The 1X2 is a three-way book, so Shin stripped it in step 1: with implied and overround , Shin’s insider fraction deflates each side to
(sqrt(x^2 + 4*(1-x)*0.529101^2/1.052671) - x)/(2*(1-x)) + (sqrt(x^2 + 4*(1-x)*0.319489^2/1.052671) - x)/(2*(1-x)) + (sqrt(x^2 + 4*(1-x)*0.204082^2/1.052671) - x)/(2*(1-x)) = 1The sum starts at when and falls monotonically, so the sign flip is unique — scan and the bisection lands back on . At the root each of the three terms is its fair leg — read straight off them.
giving the fair vector . It does not become three more hard equations: at a −0.50 Handicap, home cover is already exactly — the same event the 1X2 home leg prices — and two books rarely quote it identically, so pinning both would make them fight over one number. Instead the whole 1X2 is a soft target, and this page pursues it with a diagonal-inflated bivariate Poisson (Karlis–Ntzoufras 2005): mix the independent-Poisson grid with a common-shock coupling and a diagonal-inflation weight , then re-solve so the Handicap and Total still hold exactly on every trial.
is the common-shock construction with independent ; at it is exactly the independent-Poisson grid of steps 2–3. is a geometric distribution laid along the final-score diagonal starting at 1-1 (the draw cells 1-1, 2-2, 3-3, … — final 0-0 deliberately takes none: measured against Saba’s own Correct Score boards, books price 0-0 at the independent-Poisson level and keep their draw surplus in the mid/high diagonal, so any 0-0 share only over-prices that cell); ω sets how the mass tilts (ω < 1 decays from 1-1, ω = 1 is uniform, ω > 1 leans toward the high diagonal), and so is a proper distribution and the mixture stays mass-complete.
Where each knob’s authority comes from. θ injects draw mass directly — a slug of diagonal probability, straight onto the equal-score cells. λ₃ has no direct line to the 1X2: , so the shock cancels in the goal margin — inside the BP part every handicap event and the raw win/draw/loss split depend on alone. λ₃ reaches the draw only indirectly, through the Total anchor: the expected total is , so raising λ₃ forces down to hold the Total — a lower-scoring match, which crowds probability toward the low, draw-heavy cells. So both knobs are draw-directional: θ pushes the draw up head-on, λ₃ pushes it up sideways.
This is the sharp contrast with the candidate’s pull (the φ/σ page). There σ is a genuine home:away lever — it tilts the win and loss halves against each other and owns the home direction structurally, dead only at the ±0.50 line, where the Handicap already pins . Here neither knob is a home:away lever — both move the draw — so the home leg is reachable only when the anchored Handicap event differs from . At a ±0.50-class line the two coincide, the home residual is frozen, and the two draw-directional knobs collapse onto one direction — the fit defers (θ only, λ₃ = 0). At a deeper line the home leg frees up and the two knobs regain independent traction (θ touches only the diagonal, λ₃ reshapes the low-score region through the Total trade), so Gauss–Newton fits both legs with λ₃ engaging — but as a byproduct of the differing anchor, not a dedicated tilt like σ. The displayed rankRatio quantifies which regime this quote is in. And where φ rescales the diagonal it inherits (multiplicative, , keeping each draw cell’s share of the diagonal), θ overwrites the diagonal toward ω’s geometric profile (additive) — visible below in the Correct-Score draw cells and the even-total Exact-Total buckets.
What the pull did:
| 1X2 leg | two-input grid | pulled | 1X2 target | Δ |
|---|---|---|---|---|
| Home | 0.500000 | 0.500000 | 0.509241 | -9.2e-3 |
| Draw | 0.248599 | 0.302298 | 0.302298 | +9.3e-11 |
| Away | 0.251401 | 0.197702 | 0.188461 | +9.2e-3 |
landed with at fixed — Δ home and Δ draw are the minimized residuals; Δ away follows from and stays a cross-check.
Where the additive leg-map comes from — and the ω unidentifiability
The mixture layers a diagonal-only distribution onto the BP grid, then renormalizes nothing (both components already sum to 1). Splitting into its three 1X2 blocks, the off-diagonal blocks get only the factor while the diagonal picks up the full (since ):
Contrast the φ/σ candidate, whose weighting is multiplicative and needs a renormalizer — , so φ rescales the diagonal cells it inherits, keeping their internal shape (2-2 : 3-3 fixed). The DIBP map instead replaces the diagonal’s shape: the surviving keeps the BP profile, but the injected imposes ω’s geometric decay — so which draw cells grow is set by ω, not inherited.
ω is unidentifiable from the 1X2. The total injected diagonal mass is whatever ω is — so the achieved draw (and hence home, away) is blind to ω. Move the ω field above and watch: the fitted 1X2 holds to solver tolerance while the Correct-Score draw cells and even-total Exact-Total buckets visibly reshape — a low ω piles the mass onto 1-1, ω = 1 spreads it evenly, ω > 1 leans it up the diagonal toward 3-3, 4-4, … (0-0 never takes injection). That is the deliberate pedagogy of this candidate: the 1X2 pins the diagonal’s level, ω is a free hand on its shape.
Unroll the (λ₃, θ) search — rank check, then the draw bisection
The fit first probes both residual directions at λ₃ = θ = 0 and measures the shape Jacobian’s normalized rank, < 10⁻⁸ — the two knobs collapse onto one direction (both raise the draw, and this Handicap already fixes the home leg). λ₃ pins at 0 — the ridge prefers the pure diagonal-inflation explanation — and the one live knob, θ, is bisected onto the draw:
| i | lo | hi | θ | l₁ | l₂ | Δ home | Δ draw |
|---|---|---|---|---|---|---|---|
| 2 | 0.000000 | 0.450000 | 0.22500000 | 1.725941 | 0.607856 | -9.2e-3 | +1.0e-1 |
| 3 | 0.000000 | 0.225000 | 0.11250000 | 1.661924 | 0.860680 | -9.2e-3 | +2.6e-2 |
| 4 | 0.000000 | 0.112500 | 0.05625000 | 1.634331 | 0.967856 | -9.2e-3 | -1.3e-2 |
| 5 | 0.056250 | 0.112500 | 0.08437500 | 1.647825 | 0.915619 | -9.2e-3 | +6.6e-3 |
| 6 | 0.056250 | 0.084375 | 0.07031250 | 1.641006 | 0.942060 | -9.2e-3 | -3.3e-3 |
| 7 | 0.070313 | 0.084375 | 0.07734375 | 1.644397 | 0.928922 | -9.2e-3 | +1.7e-3 |
| 8 | 0.070313 | 0.077344 | 0.07382812 | 1.642697 | 0.935511 | -9.2e-3 | -7.8e-4 |
| 9 | 0.073828 | 0.077344 | 0.07558594 | 1.643546 | 0.932222 | -9.2e-3 | +4.6e-4 |
| 10 | 0.073828 | 0.075586 | 0.07470703 | 1.643121 | 0.933868 | -9.2e-3 | -1.6e-4 |
| 11 | 0.074707 | 0.075586 | 0.07514648 | 1.643333 | 0.933045 | -9.2e-3 | +1.5e-4 |
| 12 | 0.074707 | 0.075146 | 0.07492676 | 1.643227 | 0.933456 | -9.2e-3 | -4.9e-6 |
| 13 | 0.074927 | 0.075146 | 0.07503662 | 1.643280 | 0.933251 | -9.2e-3 | +7.2e-5 |
| 14 | 0.074927 | 0.075037 | 0.07498169 | 1.643254 | 0.933353 | -9.2e-3 | +3.4e-5 |
| 15 | 0.074927 | 0.074982 | 0.07495422 | 1.643241 | 0.933405 | -9.2e-3 | +1.4e-5 |
| 16 | 0.074927 | 0.074954 | 0.07494049 | 1.643234 | 0.933431 | -9.2e-3 | +4.8e-6 |
| 17 | 0.074927 | 0.074940 | 0.07493362 | 1.643231 | 0.933443 | -9.2e-3 | -7.2e-8 |
| 18 | 0.074934 | 0.074940 | 0.07493706 | 1.643232 | 0.933437 | -9.2e-3 | +2.3e-6 |
| 19 | 0.074934 | 0.074937 | 0.07493534 | 1.643231 | 0.933440 | -9.2e-3 | +1.1e-6 |
| 20 | 0.074934 | 0.074935 | 0.07493448 | 1.643231 | 0.933442 | -9.2e-3 | +5.3e-7 |
| 21 | 0.074934 | 0.074934 | 0.07493405 | 1.643231 | 0.933443 | -9.2e-3 | +2.3e-7 |
| 22 | 0.074934 | 0.074934 | 0.07493384 | 1.643231 | 0.933443 | -9.2e-3 | +7.9e-8 |
| 23 | 0.074934 | 0.074934 | 0.07493373 | 1.643231 | 0.933443 | -9.2e-3 | +3.7e-9 |
| 24 | 0.074934 | 0.074934 | 0.07493368 | 1.643231 | 0.933443 | -9.2e-3 | -3.4e-8 |
| 25 | 0.074934 | 0.074934 | 0.07493370 | 1.643231 | 0.933443 | -9.2e-3 | -1.5e-8 |
| 26 | 0.074934 | 0.074934 | 0.07493372 | 1.643231 | 0.933443 | -9.2e-3 | -5.8e-9 |
| 27 | 0.074934 | 0.074934 | 0.07493372 | 1.643231 | 0.933443 | -9.2e-3 | -1.0e-9 |
| 28 | 0.074934 | 0.074934 | 0.07493373 | 1.643231 | 0.933443 | -9.2e-3 | +1.3e-9 |
| 29 | 0.074934 | 0.074934 | 0.07493373 | 1.643231 | 0.933443 | -9.2e-3 | +9.3e-11 |
Bisection moves: Δ draw < 0 keeps the upper half (lo = mid), > 0 the lower; it stops at |Δ draw| < 1e-9. Δ home never moves down the rows — that is the deferral made visible: neither knob can change it once the Handicap pins P(h>a), and λ₃ was ruled out by the rank check.
The per-stage table — the baseline and the pulled solve side by side:
| Stage | l₁ | l₂ | λ₃ | θ | Δ cover | Δ over | Δ home | Δ draw | Δ away |
|---|---|---|---|---|---|---|---|---|---|
| Poisson | 1.608939 | 1.065121 | — | — | 3.8e-9 | 7.1e-9 | — | — | — |
| DIBP | 1.643231 | 0.933443 | 0.000000 | 0.074934 | 4.5e-11 | 5.6e-11 | -9.2e-3 | +9.3e-11 | +9.2e-3 |
Hard-anchor gaps: Handicap 4.5e-11, Total 5.6e-11 — the pull never trades them; is held fixed throughout. This run deferred: with both knobs draw-directional and the anchored cover event already pinning (the ±0.50 line) — the same event the 1X2 home leg prices — the two collapse onto one direction, so λ₃ = 0 and Δ home above is simply the two books’ disagreement over that event, reported not fought. Quote a Handicap whose anchored event cuts across the 1X2 regions (e.g. −1.00 at −0.59 / +0.51, anchoring P(win by 2+)) and the home residual frees up: the rank climbs and the fit switches to Gauss–Newton.
Shape caveats: the 1X2 fixes the diagonal’s level (its total mass), but its shape — which draw cells carry it — is imposed by ω, not read from a quote. Pin the correct-score profile with correct-score quotes if you need it. Because only touches the diagonal from 1-1 up (even totals ≥ 2 — never the 0-goal bucket), Odd/Even and Exact-Total at those even totals move with θ and ω while odd totals and 0-0 do not; and since λ₃ mostly reshapes the low cells through the Total trade, its footprint on the wider ladders is small.