Teorie kombinatoriky
Kombinatorická pravidla
Pravidlo součtu
Pokud lze úlohu rozložit na několik disjunktních případů (navzájem se vylučujících), je celkový počet možností součtem možností v jednotlivých případech.
Příklad
Kolika způsoby si můžu vybrat jídlo, když menu nabízí 3 polévky a 5 hlavních jídel? Předpokládám, že si beru buď polévku, nebo hlavní jídlo.
Pravidlo součinu
Pravidlo součinu udává počet všech \(k\)-tic, u kterých
-
- prvek lze vybrat \(n_1\) způsoby
-
- prvek lze vybrat \(n_2\) způsoby
-
- prvek lze vybrat \(n_3\) způsoby
- ...
Celkový počet: \(n_1 \cdot n_2 \cdot \ldots \cdot n_k\).
Příklad
Kolik různých SPZ lze vytvořit, pokud se skládá ze 3 písmen (26 možností) a 4 číslic (10 možností)?
Základní kombinatorické výběry
Variace (záleží na pořadí)
Variace je libovolná uspořádaná \(k\)-tice prvků z \(n\)-prvkové množiny. Záleží na pořadí – výběr \((A, B)\) je jiný než \((B, A)\). Variace vychází z pravidla součinu.
Vzorce
- Bez opakování: \(V(k, n) = \frac{n!}{(n-k)!}\) — každý prvek lze použít nejvýše jednou.
- S opakováním: \(V'(k, n) = n^k\) — každý prvek lze použít libovolněkrát.
Variace z \(n\) prvkové množiny nám dovoluje vytvořit dvojice, trojice, … \(k\)-tice prvků, ve kterých záleží na pořadí.
Permutace (přeuspořádání všech prvků)
Permutace je libovolná uspořádaná \(n\)-tice, která obsahuje všechny prvky dané množiny. Jinak řečeno – kolika způsoby lze seřadit \(n\) různých prvků.
Vzorce
- Bez opakování: \(P(n) = n!\) — každý prvek právě jednou.
- S opakováním: \(P'(k_1, \dots, k_n) = \frac{(k_1 + \dots + k_n)!}{k_1! \cdot \ldots \cdot k_n!}\) — některé prvky se opakují.
Permutace bez opakování jsou takové uspořádané \(n\)-tice, kde je každý prvek použit právě jednou. Kdybychom potřebovali spočítat, kolik různých permutací bez opakování můžeme vytvořit, využijeme k tomu faktoriál.
Faktoriál
Faktoriál čísla \(n\) je součin všech přirozených čísel menších než \(n\)
Faktoriál nuly
Jednoduché vysvětlení je pomocí praktického použití faktoriálů. Nula věcí lze uspořádat pouze do jedné množiny - a to konkrétně do prázdné množiny.
Aproximace faktoriálu
Faktoriál díky svému výpočtu hodně rychle nabývá na hodnotě, abychom nemuseli ručně a zdlouhavě provádět výpočet faktoriálu, dá se výsledek odhadnout pomocí stirlingova vzorce
Čím vyšší faktoriál počítáme, tím menší je odchylka.
Permutace s opakováním stále vyžaduje, aby se využili všechny prvky, ovšem nyní se může prvek vyskytovat vícekrát.
Příklad
Například pokud bychom spočítali písmena ve slově Liberec, tak dostaneme následující tabulku:
| Písmeno | Počet výskytu |
|---|---|
| L | 1 |
| I | 1 |
| B | 1 |
| E | 2 |
| R | 1 |
| C | 1 |
Vidíme, že se písmeno \(e\) vyskytuje dvakrát. Vzoreček se nám tedy mírně mění, a vypadá takto: \(P'(1,1,1,2,1,1) = \frac{(1+1+1+2+1+1)!}{1!\cdot{1}!\cdot{1}!\cdot{2}!\cdot{1}!\cdot{1}!} = \frac{7!}{2}=2520\)
Kombinace
Jak už název napovídá - kombinační číslo nějak souvisí s kombinací. Je to totiž alternativnější a rychlejší zápis.
Říká nám tedy, kolik můžeme vytvořit \(k\) členných kombinací z \(n\) prvků.
Rozdělení objektů do tříd
Systematická klasifikace 12 základních problémů kombinatoriky, které řeší rozmístění \(n\) objektů do \(k\) přihrádek (tříd). Výsledek závisí na třech kritériích:
- Zda jsou objekty rozlišitelné (R) nebo nerozlišitelné (N).
- Zda jsou přihrádky rozlišitelné (R) nebo nerozlišitelné (N).
- Jaké omezení platí pro počet objektů v přihrádce (libovolně, \(\le 1\), \(\ge 1\)).
| Číslo | Objekty (\(n\)) | Přihrádky (\(k\)) | Omezení v přihrádce | Matematický vzorec / Výsledek | Kombinatorický význam / Příklad |
|---|---|---|---|---|---|
| 1 | Rozlišitelné | Rozlišitelné | Libovolně | \(k^n\) | Variace s opakováním (Barvení \(n\) křesel \(k\) barvami) |
| 2 | Rozlišitelné | Rozlišitelné | Max jeden (\(\le 1\)) | \(\frac{k!}{(k-n)!}\) pro \(n \le k\) \(0\) pro \(n > k\) |
Variace bez opakování / Injektivní zobrazení |
| 3 | Rozlišitelné | Rozlišitelné | Min jeden (\(\ge 1\)) | \(k! \cdot \left\{ \begin{matrix} n \\ k \end{matrix} \right\}\) | Surjektivní zobrazení (Rozdělení lidí do jmenovaných týmů) |
| 4 | Nerozlišitelné | Rozlišitelné | Libovolně | \(\binom{n+k-1}{n}\) | Kombinace s opakováním / Hvězdičky a čáry |
| 5 | Nerozlišitelné | Rozlišitelné | Max jeden (\(\le 1\)) | \(\binom{k}{n}\) pro \(n \le k\) \(0\) pro \(n > k\) |
Kombinace bez opakování (Výběr \(n\) hrnků, kam dáme minci) |
| 6 | Nerozlišitelné | Rozlišitelné | Min jeden (\(\ge 1\)) | \(\binom{n-1}{k-1}\) | Hvězdičky a čáry, kdy v každé přihrádce musí být aspoň 1 prvek |
| 7 | Rozlišitelné | Nerozlišitelné | Libovolně | \(\sum_{i=1}^{k} \left\{ \begin{matrix} n \\ i \end{matrix} \right\}\) | Rozklad množiny na nejvýše \(k\) neprázdných podsystémů |
| 8 | Rozlišitelné | Nerozlišitelné | Max jeden (\(\le 1\)) | \(1\) pro \(n \le k\) \(0\) pro \(n > k\) |
Všechny objekty v samostatných stejných krabicích |
| 9 | Rozlišitelné | Nerozlišitelné | Min jeden (\(\ge 1\)) | \(\left\{ \begin{matrix} n \\ k \end{matrix} \right\}\) | Stirlingova čísla 2. druhu (Rozklad množiny na \(k\) bloků) |
| 10 | Nerozlišitelné | Nerozlišitelné | Libovolně | \(\sum_{i=1}^{k} p_i(n)\) | Rozklad čísla \(n\) na nejvýše \(k\) sčítanců |
| 11 | Nerozlišitelné | Nerozlišitelné | Max jeden (\(\le 1\)) | \(1\) pro \(n \le k\) \(0\) pro \(n > k\) |
Každá stejná kulička má svou vlastní stejnou krabici |
| 12 | Nerozlišitelné | Nerozlišitelné | Min jeden (\(\ge 1\)) | \(p_k(n)\) | Počet rozkladů čísla \(n\) na přesně \(k\) kladných sčítanců |
Poznámka ke značení: Výraz \(\left\{ \begin{matrix} n \\ k \end{matrix} \right\}\) značí Stirlingovo číslo 2. druhu, symbol \(p_k(n)\) značí partition function (funkci rozkladu čísla).
Stirlingova čísla
Stirlingova čísla jsou dvě sady číselných řad.
Stirlingova čísla 2. druhu
Stirlingova čísla 2. druhu odpovídají na základní kombinatorickou otázku: Kolika způsoby lze rozdělit množinu \(n\) rozlišitelných prvků do \(k\) nerozlišitelných neprázdných přihrádek?
Rekurence
Stirlingova čísla 2. druhu lze vyjádřit také rekurentním vztahem:
Rozmístění studentů na pokoje
Máme 4 studenty (Karel, Adam, Petr, Jan) a chceme je ubytovat ve 2 identických pokojích tak, aby žádný pokoj nezůstal prázdný. Chceme tedy zjistit hodnotu \(\left\{ \begin{matrix} 4 \\ 2 \end{matrix} \right\}\).
Podle rekurence:
Těchto 7 reálných možností (rozkladů množiny) vypadá takto:
- {Karel} | {Adam, Petr, Jan}
- {Adam} | {Karel, Petr, Jan}
- {Petr} | {Karel, Adam, Jan}
- {Jan} | {Karel, Adam, Petr}
- {Karel, Adam} | {Petr, Jan}
- {Karel, Petr} | {Adam, Jan}
- {Karel, Jan} | {Adam, Petr}
Stirlingova čísla 1. druhu
Stirlingova čísla 1. druhu mají primární význam u permutací. Udávají počet permutací \(n\)-prvkové množiny, které se skládají z přesně \(k\) nezávislých cyklů.
Rekurence
Stirlingova čísla 1. druhu lze vyjádřit také rekurentním vztahem:
Rozpisy cyklů
Chceme zjistit \(\left[ \begin{matrix} 3 \\ 2 \end{matrix} \right]\), tedy kolik permutací 3 prvků \(\{1, 2, 3\}\) má přesně 2 cykly. Podle vzorce: $\(\left[ \begin{matrix} 3 \\ 2 \end{matrix} \right] = 2 \cdot \left[ \begin{matrix} 2 \\ 2 \end{matrix} \right] + \left[ \begin{matrix} 2 \\ 1 \end{matrix} \right] = 2 \cdot 1 + 1 = \mathbf{3}\)$
Všech 3! = 6 možných permutací tří prvků vypadá v cyklickém zápisu takto:
- \((1)(2)(3)\) — 3 cykly
- \((1\ 2\ 3)\) — 1 cyklus
- \((1\ 3\ 2)\) — 1 cyklus
- \(\mathbf{(1\ 2)(3)}\) — 2 cykly | Prvky 1 a 2 si prohodily místa, 3 zůstal.
- \(\mathbf{(1\ 3)(2)}\) — 2 cykly | Prvky 1 a 3 si prohodily místa, 2 zůstal.
- \(\mathbf{(2\ 3)(1)}\) — 2 cykly | Prvky 2 a 3 si prohodily místa, 1 zůstal.
Přechod mezi mocninami
V matematické analýze a kombinatorice se často pracuje s tzv. klesajícím faktoriálem, který zkracuje zápis variací: $\(x^{\underline{n}} = x(x-1)(x-2)\dots(x-n+1)\)$
Stirlingova čísla 1. druhu fungují jako koeficienty polynomu, když chceme tento klesající faktoriál roznásobit a převést na standardní mocniny \(x^k\): $\(x^{\underline{n}} = \sum_{k=0}^{n} (-1)^{n-k} \left[ \begin{matrix} n \\ k \end{matrix} \right] x^k\)$
Příklad pro \(n = 3\): Vezmeme klasické algebraické roznásobení: $\(x^{\underline{3}} = x(x-1)(x-2) = x(x^2 - 3x + 2) = \mathbf{x^3 - 3x^2 + 2x}\)$
Nyní použijeme vzorec se Stirlingovými čísly 1. druhu pro \(n=3\): $\(x^{\underline{3}} = (-1)^{3-1}\left[ \begin{matrix} 3 \\ 1 \end{matrix} \right]x^1 + (-1)^{3-2}\left[ \begin{matrix} 3 \\ 2 \end{matrix} \right]x^2 + (-1)^{3-3}\left[ \begin{matrix} 3 \\ 3 \end{matrix} \right]x^3\)$ Doplníme hodnoty čísel (\(\left[ \begin{matrix} 3 \\ 1 \end{matrix} \right]=2\), \(\left[ \begin{matrix} 3 \\ 2 \end{matrix} \right]=3\), \(\left[ \begin{matrix} 3 \\ 3 \end{matrix} \right]=1\)): $\(x^{\underline{3}} = (1 \cdot 2)x^1 + (-1 \cdot 3)x^2 + (1 \cdot 1)x^3 = \mathbf{x^3 - 3x^2 + 2x}\)$ Oba postupy vedou ke stejnému polynomu. Stirlingova čísla 1. druhu tak umožňují počítačovým algebraickým systémům okamžitě roznásobovat složité závorky bez nutnosti krokového násobení.
Analýza algoritmů
Představme si algoritmus pro nalezení maxima v poli o velikosti \(n\):
let max = pole[0];
for (let i = 1; i < n; i++) {
if (pole[i] > max) {
max = pole[i]; // <--- Kolikrát se spustí tento řádek?
}
}
Chceme vědět: Kolikrát se v průměru přepíše proměnná max?
Inicializace max = pole[0] je první přepis (1. prvek je vždy největší ze všech dosud viděných). Co se děje dál?
- Když algoritmus kontroluje 2. prvek v pořadí (
pole[1]), jaká je šance, že je větší než ten první? Protože testujeme dvě náhodná čísla, šance, že to druhé je největší, je přesně \(\frac{1}{2}\). - Když algoritmus dorazí ke 3. prvku (
pole[2]), jaká je šance, že přepíšemax? Přepíše ho jen tehdy, pokud je toto číslo největší ze všech tří dosud prozkoumaných. Šance je tedy \(\frac{1}{3}\). - U \(i\)-tého prvku je šance, že je největší z dosud viděných \(i\) prvků, přesně \(\frac{1}{i}\).
Průměrný počet všech přepisů je prostým součtem těchto pravděpodobností:
Tento součet se nazývá Harmonické číslo (\(H_n\)). Abychom tyto zlomky sečetli, musíme je převést na společného jmenovatele, kterým je \(n!\). Podívejme se, co se stane v čitateli. Představme si funkci, která generuje čitatele pro libovolné \(H_n\). Tato funkce úzce souvisí s derivací klesajícího faktoriálu \(x^{\underline{n}} = x(x-1)(x-2)\dots(x-n+1)\). Když klesající faktoriál roznásobíme do klasického polynomu, jeho koeficienty jsou z definice Stirlingova čísla 1. druhu \(\left[\begin{matrix} n \\ k \end{matrix} \right]\). Při sčítání zlomků v Harmonickém čísle provádíme algebraicky stejnou operaci (násobíme mezi sebou všechny kombinace indexů kromě jednoho), což způsobí, že se v čitateli objeví právě tato čísla jako váhy pro jednotlivé počty přepisů (\(k\)):
Příklad pro \(n=3\):
Když se podíváme na klesající faktoriál pro \(n=3\), jeho roznásobením dostaneme koeficienty \(\mathbf{2}, \mathbf{3}, \mathbf{1}\): $\(x^{\underline{3}} = x(x-1)(x-2) = \mathbf{1}x^3 - \mathbf{3}x^2 + \mathbf{2}x\)$ Tyto koeficienty jsou přesně Stirlingova čísla \(\left[\begin{matrix} 3 \\ 3 \end{matrix} \right]=1\), \(\left[\begin{matrix} 3 \\ 2 \end{matrix} \right]=3\) a \(\left[\begin{matrix} 3 \\ 1 \end{matrix} \right]=2\). Vážený součet v čitateli pak dává: \((3 \cdot \mathbf{1}) + (2 \cdot \mathbf{3}) + (1 \cdot \mathbf{2}) = 11\).
Závěr Díky tomuto algebraickému propojení víme, že průměrný případ chování kódu přesně kopíruje růst Harmonického čísla. Z matematické analýzy víme, že \(H_n \approx \ln n\).
Pro pole o milionu prvcích se proměnná max v průměru přepíše pouze \(\ln(1\ 000\ 000) \approx 14\text{-krát}\). Vnitřek podmínky se spouští tak výjimečně, že na rychlost programu nemá prakticky žádný vliv.
Algebraické vlastnosti permutací
Jestliže máme nějakou množinu \(N\), tak permutace je v podstatě akorát přeuspořádání prvků - tedy z množiny \(N\) uděláme nějakou množinu \(N'\), která má stejné prvky, akorát se liší pořadím prvků. Můžeme tedy tvrdit, že každé přerovnání \(n\)-tice jí přirazuje další \(n\)-tici. Vzniká nám tedy zobrazení z množiny \(N\) do množiny \(N\). Toto zobrazení je prosté. Tím, že se jedná o prosté zobrazení, získává permutace všechny jeho vlastnosti, například možnost skládat permutace (skládat zobrazení) nebo vytvářet inverzní permutaci
Skládání permutací
V horním řádku máme původní pozice prvků a v dolním řádku nové pozice prvků.
V první permutaci koukáme, že k prvnímu prvku máme přiřazený prvek 2. Koukneme tedy do druhé permutace a nahradíme dvojku prvkem, který v druhé permutaci dvojce odpovídá.

Permutační cykly
Permutační cyklus je způsob zápisu permutace, kdy opakovaně aplikujeme permutaci, dokud se nedostaneme zpět na počáteční prvek. Každou permutaci \(n\)-prvkové množiny lze jednoznačně zapsat jako součin nezávislých (disjunktních) cyklů.
Příklad
Permutace \(\pi = \left(\begin{smallmatrix}1 & 2 & 3 & 4 & 5 \\ 4 & 3 & 2 & 5 & 1\end{smallmatrix}\right)\) má cykly:
- \(1 \to 4 \to 5 \to 1\) → cyklus \((1\,4\,5)\)
- \(2 \to 3 \to 2\) → cyklus \((2\,3)\)
Zápis: \(\pi = (1\,4\,5)(2\,3)\)
Vlastnosti cyklů
- Cyklus délky \(k\) lze rozepsat jako \(k-1\) transpozic: \((i_1, i_2, \dots, i_k) = (i_1,i_2)(i_1,i_3)\dots(i_1,i_k)\)
- Umocňování \((i_1, i_2, \dots, i_k)^m\) posouvá prvky o \(m \bmod k\) pozic.
- Sudá/lichá permutace: \(\sigma(\pi) = (-1)^n\), kde \(n\) je počet sudých cyklů v rozkladu.
Permutační grupy
Množina všech permutací \(n\)-prvkové množiny se značí \(S_n\) a nazývá se symetrická grupa. Má \(n!\) prvků. Operací je skládání permutací – výsledkem složení dvou permutací je opět permutace z \(S_n\). \(S_n\) není komutativní pro \(n \ge 3\).
Věžové polynomy
Věžové polynomy (Rook Polynomials) jsou elegantní způsob, jak řešit permutace se zakázanými pozicemi (např. když konkrétní člověk nesmí dostat konkrétní úkol). Problém se vizualizuje jako umísťování \(k\) šachových věží na desku \(B\) (množinu povolených políček) tak, aby se navzájem neohrožovaly – tj. nesmí sdílet stejný řádek ani sloupec.
Věžový polynom desky \(B\) definujeme jako:
Kde \(r_k(B)\) je počet způsobů, jak umístit \(k\) neohrožujících se věží.
Pravidla pro zjednodušení výpočtu
-
Disjunktní desky: Pokud lze desku rozdělit na dvě části \(B_1\) a \(B_2\), které nesdílejí žádný společný řádek ani sloupec, polynom je jejich součinem: \(R(x, B) = R(x, B_1) \cdot R(x, B_2)\)
-
Věta o větvení (Rozklad podle políčka \(e\)): Zvolíme jedno políčko \(e\). Buď na něj věž nedáme, nebo dáme (tím vyřadíme jeho řádek a sloupec, čímž vznikne redukovaná deska \(B_e\)): \(R(x, B) = R(x, B \setminus \{e\}) + x \cdot R(x, B_e)\)
Přes princip inkluze a exkluze pak počet povolených permutací (kdy žádná věž nestojí na zakázaném políčku desky \(B\) o velikosti \(n \times n\)) spočítáme jako:
Rekurentní posloupnost
Rekurentní posloupnost (též rekurence) je vyjádření posloupnosti, která k výpočtu libovolného členu využívá jiné členy posloupnosti. Rekurence je dána rekurentním vztahem a počátečními podmínkami. S rekurencí se velmi špatně počítají vyšší členy, a proto je vhodné zkoumat, jestli by daná rekurentní posloupnost, vyjádřená rekurentním vztahem, nešla převést na jinou posloupnost, která již vztah bude mít nerekurentní.
Lineární rekurence s konstantními koeficienty
Lineární rekurence řádu \(k\) s konstantními koeficienty má tvar:
kde \(c_i\) jsou konstanty. Řešíme substitucí \(a_n = r^n\), která převede rekurenci na charakteristický polynom stupně \(k\).
Homogenní Lineární Rekurentní Vztahy
Začněme příkladem. Uvažujme následující rekurenci:
Našim cílem je najít takovou posloupnost, která má stejné členy, ale není vyjádřená rekurencí. Nejdříve je potřeba zjistit, jaké vlastnosti tato rekurence má. Když se na ní podíváme, tak:
- Je lineární, protože neobsahuje členy mocnin 2 a větší (vztah je lineární kombinací členů posloupnosti a konstant)
- Je homogenní, protože do výpočtu nevstupuje žádná další ("vnější") síla. Jinak řečeno, pravá strana rovnice je rovna nule.
Nyní potřebujeme najít způsob, jakým rekurenci vyjádřit bez rekurence. Protože jsou členy rekurence podposloupnosti, musíme najít takovou náhradu, která při výpočtu dalšího členu posloupnosti nezmění tvar. Konstantní
Tím jsme našli takzvaný charakteristický polynom.
Komplexní kořeny
Pokud charakteristický polynom nemá reálné kořeny, použijeme Eulerův vzorec:
Obecné řešení pro komplexně sdružené kořeny \(a \pm bi\): $\(\rho = \sqrt{a^2 + b^2},\quad \theta = \arctan\frac{b}{a}\)$ $\(a_n = \rho^n \left(\alpha \cos(n\theta) + \beta \sin(n\theta)\right)\)$
Nehomogenní LRV
Nehomogenní rekurence obsahuje pravou stranu \(f(n)\):
Řešení je součtem obecného řešení homogenní rovnice a partikulárního řešení. Partikulární řešení odhadujeme podle tvaru \(f(n)\) – pro \(f(n) = n^2\) zkoušíme polynom 2. stupně, pro \(f(n) = 3^n\) zkoušíme \(\alpha \cdot 3^n\).
Příklady
Příklad 1
Zadání
Najděte explicitní tvar posloupnosti \(a_{n+2}=5a_{n+1}-6a_{n}\) s počátečními podmínkami \(a_0=2\) a \(a_1=5\).
Charakteristický polynom
Kořeny charakteristického polynomu
Příklad 2
Zadání
Najděte explicitní tvar posloupnosti \(a_{n+2}-4a_{n+1}+4a_{n}=0\) s počátečními podmínkami \(a_0=1\) a \(a_1=4\).
Charakteristický polynom
Kořeny charakteristického polynomu
Příklad 3
Zadání
Najděte explicitní tvar posloupnosti \(a_{n+2}+a_n=0\) s počátečními podmínkami \(a_0=1\) a \(a_1=0\).
Charakteristický polynom
Kořeny charakteristického polynomu
Příklad 4
Zadání
Najděte explicitní tvar posloupnosti \(a_{n+3}-3a_{n+2}+3a_{n+1}-a_n=0\) s počátečními podmínkami \(a_0=0\), \(a_1=1\) a \(a_2=4\).
Charakteristický polynom
Kořeny charakteristického polynomu
Pomocí hornerova schématu. Kandidátní kořeny polynomu \(ax^n + ... + b\) musí splňovat \(a \mid 1\) a \(b \mid 1\). Tudíž množina kandidátních kořenů je \(\{\pm 1\}\).
| x | 1 | -3 | +3 | -1 |
|---|---|---|---|---|
| 1 | 1 | -2 | 1 | 0 |
Vytvořující (generující funkce)
Vytvořující funkce umožňují kódovat nekonečné číselné posloupnosti \((a_n)\) do koeficientů formálních mocninných řad. Kombinatorické operace se pak řeší pomocí běžné algebry.
-
Obyčejná vytvořující funkce (OGF): \(A(x) = \sum_{n=0}^{\infty} a_n x^n\) Typicky reprezentuje výběr prvků, kde nezáleží na pořadí (kombinace, nerozlišitelné objekty).
-
Příklad: Posloupnost samých jedniček \((1, 1, 1, \dots)\) vyjadřuje řada \(1 + x + x^2 + \dots\), což odpovídá funkci \(\frac{1}{1-x}\).
- Exponenciální vytvořující funkce (EGF): \(E(x) = \sum_{n=0}^{\infty} a_n \frac{x^n}{n!}\) Používá se tam, kde na pořadí záleží (permutace, rozlišitelné objekty).