Skip to content

Commit 9b07038

Browse files
committed
Deployed fcc89f9 with MkDocs version: 1.5.3
1 parent d55acff commit 9b07038

File tree

12 files changed

+657
-335
lines changed

12 files changed

+657
-335
lines changed

Chap06/Problems/6-1/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -9808,7 +9808,7 @@ <h1>6-1 Building a heap using insertion</h1>
98089808
<li>$\text{BUILD-MAX-HEAP}(A)$: $A = \langle 3, 2, 1 \rangle$.</li>
98099809
<li>$\text{BUILD-MAX-HEAP}'(A)$: $A = \langle 3, 1, 2 \rangle$.</li>
98109810
</ul>
9811-
<p><strong>b.</strong> Each insert step takes at most $O(\lg n)$, since we are doing it $n$ times, we get a bound on the runtime of $O(n\lg n)$.</p>
9811+
<p><strong>b.</strong> It is very easy to find out that the $\text{MAX-HEAP-INSERT}$ operation for each iteration takes $\Theta(\log i)$ time, therefore the total time complexity is the sum of the individual complexities for $i$ from $2$ to $n$, which is : $\Theta(\log 2) + \Theta(\log 3) + \dots + \Theta(\log n) = \Theta(\log n!) $. By using Stirling's approximation, $\Theta (\log n!) \approx \Theta(n\log n)$, so the overall complexity is $\Theta(n\log⁡ n)$.</p>
98129812

98139813

98149814

Chap07/7.2/index.html

+40-7
Original file line numberDiff line numberDiff line change
@@ -9943,15 +9943,48 @@ <h2 id="72-1">7.2-1<a class="headerlink" href="#72-1" title="Permanent link">&pa
99439943
<blockquote>
99449944
<p>Use the substitution method to prove that the recurrence $T(n) = T(n - 1) + \Theta(n)$ has the solution $T(n) = \Theta(n^2)$, as claimed at the beginning of section 7.2.</p>
99459945
</blockquote>
9946-
<p>We represent $\Theta(n)$ as $c_2n$ and we guess that $T(n) \le c_1n^2$,</p>
9946+
<p><strong>Proof</strong></p>
9947+
<p>We are given the recurrence</p>
99479948
<p>$$
9948-
\begin{aligned}
9949-
T(n) &amp; = T(n - 1) + c_2n \\
9950-
&amp; \le c_1(n - 1)^2 + c_2n \\
9951-
&amp; = c_1n^2 - 2c_1n + c_1 + c_2n &amp; (2c_1 &gt; c_2, n \ge c_1 / (2c_1 - c_2)) \\
9952-
&amp; \le c_1n^2.
9953-
\end{aligned}
9949+
T(n) = T(n - 1) + \Theta(n),
99549950
$$</p>
9951+
<p>and we aim to prove $T(n) = \Theta(n^2)$.</p>
9952+
<p>By the definition of $\Theta(n)$, there exist constants $c_1$, $c_2$, and $n_0$ such that for all $n \ge n_0$,</p>
9953+
<p>$$
9954+
c_1 n \le f(n) \le c_2 n,
9955+
$$</p>
9956+
<p>where $f(n) = \Theta(n)$. Thus, the recurrence becomes</p>
9957+
<p>$$
9958+
T(n) = T(n - 1) + f(n), \quad \text{with} \quad c_1 n \le f(n) \le c_2 n.
9959+
$$</p>
9960+
<p><strong>Upper Bound</strong></p>
9961+
<p>We conjecture $T(n) \le c_3 n^2$ for some constant $c_3$. Assume this holds for $T(k)$, i.e., $T(k) \le c_3 k^2$. Then,</p>
9962+
<p>$$
9963+
T(k+1) = T(k) + f(k+1) \le c_3 k^2 + c_2 (k+1).
9964+
$$</p>
9965+
<p>We want to show</p>
9966+
<p>$$
9967+
c_3 k^2 + c_2 (k+1) \le c_3 (k+1)^2.
9968+
$$</p>
9969+
<p>Expanding both sides:</p>
9970+
<p>$$
9971+
c_3 (k+1)^2 = c_3 k^2 + 2c_3 k + c_3,
9972+
$$</p>
9973+
<p>and</p>
9974+
<p>$$
9975+
c_3 k^2 + c_2 (k+1) = c_3 k^2 + c_2 k + c_2.
9976+
$$</p>
9977+
<p>Thus, we need</p>
9978+
<p>$$
9979+
c_2 k + c_2 \le 2c_3 k + c_3.
9980+
$$</p>
9981+
<p>This holds for $c_2 \le 2c_3$ and $c_2 \le c_3$, which is possible by choosing appropriate constants.</p>
9982+
<p><strong>Lower Bound</strong></p>
9983+
<p>The lower bound follows similarly by applying the lower bound $c_1 n$ for $f(n)$. Thus, we can conclude that</p>
9984+
<p>$$
9985+
T(n) = \Theta(n^2).
9986+
$$</p>
9987+
<p>This completes the proof.</p>
99559988
<h2 id="72-2">7.2-2<a class="headerlink" href="#72-2" title="Permanent link">&para;</a></h2>
99569989
<blockquote>
99579990
<p>What is the running time of $\text{QUICKSORT}$ when all elements of the array $A$ have the same value?</p>

Chap23/23.1/index.html

+148-1
Original file line numberDiff line numberDiff line change
@@ -10061,7 +10061,154 @@ <h2 id="231-6">23.1-6<a class="headerlink" href="#231-6" title="Permanent link">
1006110061
<blockquote>
1006210062
<p>Show that a graph has a unique minimum spanning tree if, for every cut of the graph, there is a unique light edge crossing the cut. Show that the converse is not true by giving a counterexample.</p>
1006310063
</blockquote>
10064-
<p>(Removed)</p>
10064+
<p><strong>Remark:</strong> Do not assume that all edge weights are distinct.</p>
10065+
<p><strong>Part 1: Proving the Forward Direction</strong></p>
10066+
<p><strong>Goal:</strong> Show that if every cut in the graph has a unique light edge crossing it, then the graph has exactly one MST.</p>
10067+
<p><strong>Proof:</strong></p>
10068+
<p>Assume, for contradiction, that the graph has <strong>two distinct MSTs</strong>, $T$ and $T'$.</p>
10069+
<ol>
10070+
<li>
10071+
<p><strong>Identifying an Edge in $T$ but not in $T'$:</strong></p>
10072+
<ul>
10073+
<li>Since $T$ and $T'$ are distinct, there exists at least one edge that is in $T$ but not in $T'$.</li>
10074+
<li>Let $(u, v)$ be such an edge.</li>
10075+
</ul>
10076+
</li>
10077+
<li>
10078+
<p><strong>Creating a Cut by Removing $(u, v)$:</strong></p>
10079+
<ul>
10080+
<li>Removing $(u, v)$ from $T$ divides it into two connected components (since trees are acyclic and connected).</li>
10081+
<li>Let $T_u$ be the set of vertices reachable from $u$ without using $(u, v)$.</li>
10082+
<li>Let $T_v$ be the set of vertices reachable from $v$ without using $(u, v)$.</li>
10083+
<li>The sets $T_u$ and $T_v$ form a <strong>cut</strong> $(T_u, T_v)$ in the graph.</li>
10084+
</ul>
10085+
</li>
10086+
<li>
10087+
<p><strong>Unique Light Edge Crossing the Cut:</strong></p>
10088+
<ul>
10089+
<li>By assumption, the cut $(T_u, T_v)$ has a <strong>unique light edge</strong> crossing it.</li>
10090+
<li>Let $(x, y)$ be this unique light edge.</li>
10091+
<li>Note that $(u, v)$ crosses this cut because $u \in T_u$ and $v \in T_v$.</li>
10092+
</ul>
10093+
</li>
10094+
<li>
10095+
<p><strong>Analyzing the Unique Light Edge:</strong></p>
10096+
<ul>
10097+
<li>
10098+
<p><strong>Case 1:</strong> If $(x, y) \ne (u, v)$, then:</p>
10099+
<ul>
10100+
<li>Since $(x, y)$ is the unique light edge and not $(u, v)$, it must have a weight <strong>less than</strong> $w(u, v)$.</li>
10101+
<li><strong>Constructing a New Spanning Tree:</strong><ul>
10102+
<li>Replace $(u, v)$ in $T$ with $(x, y)$ to get $T'' = T - { (u, v) } \cup {(x, y)}$.</li>
10103+
<li>$T''$ is connected (since $(x, y)$ connects $T_u$ and $T_v$) and spans all vertices.</li>
10104+
<li>The total weight of $T''$ is less than that of $T$ because $w(x, y) &lt; w(u, v)$.</li>
10105+
</ul>
10106+
</li>
10107+
<li><strong>Contradiction:</strong><ul>
10108+
<li>$T$ was assumed to be an MST, but $T''$ has a lower total weight.</li>
10109+
<li>This contradicts the minimality of $T$.</li>
10110+
</ul>
10111+
</li>
10112+
</ul>
10113+
</li>
10114+
<li>
10115+
<p><strong>Case 2:</strong> If $(x, y) = (u, v)$, then:</p>
10116+
<ul>
10117+
<li>The unique light edge crossing the cut is $(u, v)$.</li>
10118+
<li><strong>Observing $T'$:</strong><ul>
10119+
<li>Since $(u, v) \notin T'$, there must be a path from $u$ to $v$ in $T'$ (since $T'$ is connected).</li>
10120+
<li>This path must cross the cut $(T_u, T_v)$ at least once.</li>
10121+
<li>Let $e$ be an edge on this path that crosses the cut.</li>
10122+
</ul>
10123+
</li>
10124+
<li><strong>Comparing Edge Weights:</strong><ul>
10125+
<li>Since $(u, v)$ is the unique light edge crossing the cut, and $e \ne (u, v)$, it follows that $w(u, v) &lt; w(e)$.</li>
10126+
</ul>
10127+
</li>
10128+
<li><strong>Constructing a New Spanning Tree:</strong><ul>
10129+
<li>Add $(u, v)$ to $T'$, creating a cycle.</li>
10130+
<li>Remove $e$ from this cycle to get $T'' = T' + {(u, v)} - {e}$.</li>
10131+
<li>$T''$ is connected and spans all vertices.</li>
10132+
<li>The total weight of $T''$ is less than that of $T'$ because $w(u, v) &lt; w(e)$.</li>
10133+
</ul>
10134+
</li>
10135+
<li><strong>Contradiction:</strong><ul>
10136+
<li>$T'$ was assumed to be an MST, but $T''$ has a lower total weight.</li>
10137+
<li>This contradicts the minimality of $T'$.</li>
10138+
</ul>
10139+
</li>
10140+
</ul>
10141+
</li>
10142+
</ul>
10143+
</li>
10144+
<li>
10145+
<p><strong>Conclusion:</strong></p>
10146+
<ul>
10147+
<li>In both cases, assuming the existence of two distinct MSTs leads to a contradiction.</li>
10148+
<li>Therefore, the initial assumption that there are two distinct MSTs is false.</li>
10149+
<li><strong>Hence, the graph must have a unique MST.</strong></li>
10150+
</ul>
10151+
</li>
10152+
</ol>
10153+
<hr />
10154+
<p><strong>Part 2: Showing the Converse is Not True</strong></p>
10155+
<p><strong>Goal:</strong> Provide a counterexample to show that a graph can have a unique MST even if not every cut has a unique light edge crossing it.</p>
10156+
<p><strong>Counterexample:</strong></p>
10157+
<p><strong>Graph Description:</strong></p>
10158+
<ul>
10159+
<li><strong>Vertices:</strong> $a$, $b$, $c$.</li>
10160+
<li><strong>Edges and Weights:</strong><ul>
10161+
<li>Edge $(a, b)$ with weight $1$.</li>
10162+
<li>Edge $(a, c)$ with weight $1$.</li>
10163+
<li>Edge $(b, c)$ with weight $2$.</li>
10164+
</ul>
10165+
</li>
10166+
</ul>
10167+
<p><strong>Visualization:</strong></p>
10168+
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a> (1)
10169+
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>a ------- b
10170+
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> \ /
10171+
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> \ /
10172+
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> \ /
10173+
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>(1) \ / (2)
10174+
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> c
10175+
</code></pre></div>
10176+
<p><strong>Analysis:</strong></p>
10177+
<ol>
10178+
<li>
10179+
<p><strong>Possible Spanning Trees:</strong></p>
10180+
<ul>
10181+
<li><strong>Tree 1:</strong> Edges $(a, b)$ and $(a, c)$; total weight $1 + 1 = 2$.</li>
10182+
<li><strong>Tree 2:</strong> Edges $(a, b)$ and $(b, c)$; total weight $1 + 2 = 3$.</li>
10183+
<li><strong>Tree 3:</strong> Edges $(a, c)$ and $(b, c)$; total weight $1 + 2 = 3$.</li>
10184+
</ul>
10185+
</li>
10186+
<li>
10187+
<p><strong>Identifying the Unique MST:</strong></p>
10188+
<ul>
10189+
<li>The minimum total weight is $2$, achieved by Tree 1.</li>
10190+
<li><strong>Therefore, the graph has a unique MST</strong> comprising edges $(a, b)$ and $(a, c)$.</li>
10191+
</ul>
10192+
</li>
10193+
<li>
10194+
<p><strong>Examining the Cuts:</strong></p>
10195+
<ul>
10196+
<li><strong>Cut between ${a}$ and ${b, c}$:</strong><ul>
10197+
<li>Edges crossing this cut are $(a, b)$ and $(a, c)$.</li>
10198+
<li>Both edges have the same weight $1$.</li>
10199+
<li><strong>Therefore, this cut does not have a unique light edge</strong>; it has two edges with the minimum weight.</li>
10200+
</ul>
10201+
</li>
10202+
</ul>
10203+
</li>
10204+
<li>
10205+
<p><strong>Conclusion:</strong></p>
10206+
<ul>
10207+
<li>The graph has a unique MST even though at least one cut does not have a unique light edge crossing it.</li>
10208+
<li><strong>This demonstrates that the converse is not true.</strong></li>
10209+
</ul>
10210+
</li>
10211+
</ol>
1006510212
<h2 id="231-7">23.1-7<a class="headerlink" href="#231-7" title="Permanent link">&para;</a></h2>
1006610213
<blockquote>
1006710214
<p>Argue that if all edge weights of a graph are positive, then any subset of edges that connects all vertices and has minimum total weight must be a tree. Give an example to show that the same conclusion does not follow if we allow some weights to be nonpositive.</p>

Chap23/23.2/index.html

+11-7
Original file line numberDiff line numberDiff line change
@@ -9992,13 +9992,17 @@ <h2 id="232-2">23.2-2<a class="headerlink" href="#232-2" title="Permanent link">
99929992
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">V</span>
99939993
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">Adj</span><span class="p">[</span><span class="n">r</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span>
99949994
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="w"> </span><span class="n">w</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">))</span>
9995-
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">each</span><span class="w"> </span><span class="n">u</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">V</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">T</span>
9996-
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">min</span><span class="p">(</span><span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="mf">.2</span><span class="p">)</span>
9997-
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="err"></span><span class="w"> </span><span class="p">{</span><span class="n">k</span><span class="p">}</span>
9998-
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="n">k</span><span class="p">.</span><span class="n">π</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="mf">.1</span>
9999-
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">V</span>
10000-
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">Adf</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">Adj</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="mf">.2</span>
10001-
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">Adj</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">])</span>
9995+
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">V</span>
9996+
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="n">min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err"></span>
9997+
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">each</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">V</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">T</span>
9998+
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">v</span><span class="p">]</span><span class="mf">.2</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">min</span>
9999+
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="w"> </span><span class="n">min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">v</span><span class="p">]</span><span class="mf">.2</span>
10000+
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">v</span>
10001+
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="err"></span><span class="w"> </span><span class="p">{</span><span class="n">k</span><span class="p">}</span>
10002+
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="w"> </span><span class="n">k</span><span class="p">.</span><span class="n">π</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="mf">.1</span>
10003+
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">V</span>
10004+
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">Adj</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="err"></span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">w</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="mf">.2</span>
10005+
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">w</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">))</span>
1000210006
</code></pre></div>
1000310007
<h2 id="232-3">23.2-3<a class="headerlink" href="#232-3" title="Permanent link">&para;</a></h2>
1000410008
<blockquote>

0 commit comments

Comments
 (0)