Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.75 KB | None | 0 0
  1. \documentclass[12pt]{extreport}
  2. \usepackage[T2A]{fontenc}
  3. \usepackage[utf8]{inputenc} % Кодировка входного документа;
  4. % при необходимости, вместо cp1251
  5. % можно указать cp866 (Alt-кодировка
  6. % DOS) или koi8-r.
  7.  
  8. \usepackage[english,russian]{babel} % Включение русификации, русских и
  9. % английских стилей и переносов
  10. %%\usepackage{a4}
  11. %%\usepackage{moreverb}
  12. \usepackage{amsmath,amsfonts,amsthm,amssymb,amsbsy,amstext,amscd,amsxtra,multicol}
  13. \usepackage{indentfirst}
  14. \usepackage{verbatim}
  15. \usepackage{tikz} %Рисование автоматов
  16. \usetikzlibrary{automata,positioning}
  17. \usepackage{multicol} %Несколько колонок
  18. \usepackage{graphicx}
  19. \usepackage[colorlinks,urlcolor=blue]{hyperref}
  20. \usepackage[stable]{footmisc}
  21.  
  22. %% \voffset-5mm
  23. %% \def\baselinestretch{1.44}
  24. \renewcommand{\theequation}{\arabic{equation}}
  25. \def\hm#1{#1\nobreak\discretionary{}{\hbox{$#1$}}{}}
  26. \newtheorem{Lemma}{Лемма}
  27. \theoremstyle{definiton}
  28. \newtheorem{Remark}{Замечание}
  29. %%\newtheorem{Def}{Определение}
  30. \newtheorem{Claim}{Утверждение}
  31. \newtheorem{Cor}{Следствие}
  32. \newtheorem{Theorem}{Теорема}
  33. \theoremstyle{definition}
  34. \newtheorem{Example}{Пример}
  35. \newtheorem*{known}{Теорема}
  36. \def\proofname{Доказательство}
  37. \theoremstyle{definition}
  38. \newtheorem{Def}{Определение}
  39.  
  40. %% \newenvironment{Example} % имя окружения
  41. %% {\par\noindent{\bf Пример.}} % команды для \begin
  42. %% {\hfill$\scriptstyle\qed$} % команды для \end
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49. %\date{22 июня 2011 г.}
  50. \let\leq\leqslant
  51. \let\geq\geqslant
  52. \def\MT{\mathrm{MT}}
  53. %Обозначения ``ажуром''
  54. \def\BB{\mathbb B}
  55. \def\CC{\mathbb C}
  56. \def\RR{\mathbb R}
  57. \def\SS{\mathbb S}
  58. \def\ZZ{\mathbb Z}
  59. \def\NN{\mathbb N}
  60. \def\FF{\mathbb F}
  61. %греческие буквы
  62. \let\epsilon\varepsilon
  63. \let\es\varnothing
  64. \let\eps\varepsilon
  65. \let\al\alpha
  66. \let\sg\sigma
  67. \let\ga\gamma
  68. \let\ph\varphi
  69. \let\om\omega
  70. \let\ld\lambda
  71. \let\Ld\Lambda
  72. \let\vk\varkappa
  73. \let\Om\Omega
  74. \def\abstractname{}
  75.  
  76. \def\R{{\cal R}}
  77. \def\A{{\cal A}}
  78. \def\B{{\cal B}}
  79. \def\C{{\cal C}}
  80. \def\D{{\cal D}}
  81.  
  82. %классы сложности
  83. \def\REG{{\mathsf{REG}}}
  84. \def\CFL{{\mathsf{CFL}}}
  85.  
  86.  
  87. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Problems macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  88.  
  89.  
  90. %%%%%%%%%%%%%%%%%%%%%%%% Enumerations %%%%%%%%%%%%%%%%%%%%%%%%
  91.  
  92. \newcommand{\Rnum}[1]{\expandafter{\romannumeral #1\relax}}
  93. \newcommand{\RNum}[1]{\uppercase\expandafter{\romannumeral #1\relax}}
  94.  
  95. %%%%%%%%%%%%%%%%%%%%% EOF Enumerations %%%%%%%%%%%%%%%%%%%%%
  96. \usepackage{indentfirst}
  97. \usepackage{xparse}
  98. \usepackage{ifthen}
  99. \usepackage{bm} %%% bf in math mode
  100. \usepackage{color}
  101. %\usepackage[usenames,dvipsnames]{xcolor}
  102.  
  103. \definecolor{Gray555}{HTML}{555555}
  104. \definecolor{Gray444}{HTML}{444444}
  105. \definecolor{Gray333}{HTML}{333333}
  106.  
  107.  
  108. \newcounter{problem}
  109. \newcounter{uproblem}
  110. \newcounter{subproblem}
  111. \newcounter{prvar}
  112.  
  113. \def\beforPRskip{
  114. \bigskip
  115. %\vspace*{2ex}
  116. }
  117.  
  118. \def\PRSUBskip{
  119. \medskip
  120. }
  121.  
  122.  
  123. \def\pr{\beforPRskip\noindent\stepcounter{problem}{\bf \theproblem .\;}\setcounter{subproblem}{0}}
  124. \def\pru{\beforPRskip\noindent\stepcounter{problem}{\bf $\mathbf{\theproblem}^\circ$\!\!.\;}\setcounter{subproblem}{0}}
  125. \def\prstar{\beforPRskip\noindent\stepcounter{problem}{\bf $\mathbf{\theproblem}^*$\negthickspace.}\setcounter{subproblem}{0}\;}
  126. \def\prpfrom[#1]{\beforPRskip\noindent\stepcounter{problem}{\bf Задача \theproblem~(№#1 из задания). }\setcounter{subproblem}{0} }
  127. \def\prp{\beforPRskip\noindent\stepcounter{problem}{\bf Задача \theproblem . }\setcounter{subproblem}{0} }
  128.  
  129. \def\prpvar{\beforPRskip\noindent\stepcounter{problem}\setcounter{prvar}{1}{\bf Задача \theproblem \;$\langle${\rm\Rnum{\theprvar}}$\rangle$.}\setcounter{subproblem}{0}\;}
  130. \def\prpv{\beforPRskip\noindent\stepcounter{prvar}{\bf Задача \theproblem \,$\bm\langle$\bracketspace{{\rm\Rnum{\theprvar}}}$\bm\rangle$. }\setcounter{subproblem}{0} }
  131. \def\prv{\beforPRskip\noindent\stepcounter{prvar}{\bf \theproblem\,$\bm\langle$\bracketspace{{\rm\Rnum{\theprvar}}}$\bm\rangle$}.\setcounter{subproblem}{0} }
  132.  
  133. \def\prpstar{\beforPRskip\noindent\stepcounter{problem}{\bf Задача $\bf\theproblem^*$\negthickspace. }\setcounter{subproblem}{0} }
  134. \def\prdag{\beforPRskip\noindent\stepcounter{problem}{\bf Задача $\theproblem^{^\dagger}$\negthickspace\,. }\setcounter{subproblem}{0} }
  135. \def\upr{\beforPRskip\noindent\stepcounter{uproblem}{\bf Упражнение \theuproblem . }\setcounter{subproblem}{0} }
  136. %\def\prp{\vspace{5pt}\stepcounter{problem}{\bf Задача \theproblem . } }
  137. %\def\prs{\vspace{5pt}\stepcounter{problem}{\bf \theproblem .* }
  138. \def\prsub{\PRSUBskip\noindent\stepcounter{subproblem}{\sf \thesubproblem .} }
  139. \def\prsubr{\PRSUBskip\noindent\stepcounter{subproblem}{\bf \asbuk{subproblem})}\;}
  140. \def\prsubstar{\PRSUBskip\noindent\stepcounter{subproblem}{\rm $\thesubproblem^*$\negthickspace. } }
  141. \def\prsubrstar{\PRSUBskip\noindent\stepcounter{subproblem}{$\text{\bf \asbuk{subproblem}}^*\mathbf{)}$}\;}
  142.  
  143. \newcommand{\bracketspace}[1]{\phantom{(}\!\!{#1}\!\!\phantom{)}}
  144.  
  145. \DeclareDocumentCommand{\Prpvar}{ O{null} O{} }{
  146. \beforPRskip\noindent\stepcounter{problem}\setcounter{prvar}{1}{\bf Задача \theproblem
  147. % \ifthenelse{\equal{#1}{null}}{ }{ {\sf $\bm\langle$\bracketspace{#1}$\bm\rangle$}}
  148. % ~\!\!(\bracketspace{{\rm\Rnum{\theprvar}}}). }\setcounter{subproblem}{0}
  149. % \;(\bracketspace{{\rm\Rnum{\theprvar}}})}\setcounter{subproblem}{0}
  150. %
  151. \,{\sf $\bm\langle$\bracketspace{{\rm\Rnum{\theprvar}}}$\bm\rangle$}
  152. ~\!\!\! \ifthenelse{\equal{#1}{null}}{\!}{{\sf(\bracketspace{#1})}}}.
  153.  
  154. }
  155. %\DeclareDocumentCommand{\Prpvar}{ O{level} O{meta} m }{\prpvar}
  156.  
  157.  
  158. \DeclareDocumentCommand{\Prp}{ O{null} O{null} }{\setcounter{subproblem}{0}
  159. \beforPRskip\noindent\stepcounter{problem}\setcounter{prvar}{0}{\bf Задача \theproblem
  160. ~\!\!\! \ifthenelse{\equal{#1}{null}}{\!}{{\sf(\bracketspace{#1})}}
  161. \ifthenelse{\equal{#2}{null}}{\!\!}{{\sf [\color{Gray444}\,\bracketspace{{\fontfamily{afd}\selectfont#2}}\,]}}}.}
  162.  
  163. \DeclareDocumentCommand{\Pr}{ O{null} O{null} }{\setcounter{subproblem}{0}
  164. \beforPRskip\noindent\stepcounter{problem}\setcounter{prvar}{0}{\bf\theproblem
  165. ~\!\!\! \ifthenelse{\equal{#1}{null}}{\!\!}{{\sf(\bracketspace{#1})}}
  166. \ifthenelse{\equal{#2}{null}}{\!\!}{{\sf [\color{Gray444}\,\bracketspace{{\fontfamily{afd}\selectfont#2}}\,]}}}.}
  167.  
  168. %\DeclareDocumentCommand{\Prp}{ O{level} O{meta} }
  169.  
  170. \DeclareDocumentCommand{\Prps}{ O{null} O{null} }{\setcounter{subproblem}{0}
  171. \beforPRskip\noindent\stepcounter{problem}\setcounter{prvar}{0}{\bf Задача $\bm\theproblem^* $
  172. ~\!\!\! \ifthenelse{\equal{#1}{null}}{\!}{{\sf(\bracketspace{#1})}}
  173. \ifthenelse{\equal{#2}{null}}{\!\!}{{\sf [\color{Gray444}\,\bracketspace{{\fontfamily{afd}\selectfont#2}}\,]}}}.
  174. }
  175.  
  176. \DeclareDocumentCommand{\Prpd}{ O{null} O{null} }{\setcounter{subproblem}{0}
  177. \beforPRskip\noindent\stepcounter{problem}\setcounter{prvar}{0}{\bf Задача $\bm\theproblem^\dagger$
  178. ~\!\!\! \ifthenelse{\equal{#1}{null}}{\!}{{\sf(\bracketspace{#1})}}
  179. \ifthenelse{\equal{#2}{null}}{\!\!}{{\sf [\color{Gray444}\,\bracketspace{{\fontfamily{afd}\selectfont#2}}\,]}}}.
  180. }
  181.  
  182.  
  183. \def\prend{
  184. \bigskip
  185. % \bigskip
  186. }
  187.  
  188.  
  189.  
  190.  
  191. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EOF Problems macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  192.  
  193.  
  194.  
  195. %\usepackage{erewhon}
  196. %\usepackage{heuristica}
  197. %\usepackage{gentium}
  198.  
  199. \usepackage[portrait, top=3cm, bottom=1.5cm, left=3cm, right=2cm]{geometry}
  200.  
  201. \usepackage{fancyhdr}
  202. \pagestyle{fancy}
  203. \renewcommand{\headrulewidth}{0pt}
  204. \lhead{\fontfamily{fca}\selectfont {Основные алгоритмы 2020} }
  205. %\lhead{ \bf {ТРЯП. } Семинар 1 }
  206. %\chead{\fontfamily{fca}\selectfont {Вариант 1}}
  207. \rhead{\fontfamily{fca}\selectfont Домашнее задание 2. Захаров Артемий Б05-906}
  208. %\rhead{\small 01.09.2016}
  209. \cfoot{}
  210.  
  211. \usepackage{titlesec}
  212. \titleformat{\section}[block]{\Large\bfseries\filcenter {\setcounter{problem}{0}} }{}{1em}{}
  213.  
  214.  
  215. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Обозначения и операции %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  216.  
  217. \newcommand{\divisible}{\mathop{\raisebox{-2pt}{\vdots}}}
  218. \let\Om\Omega
  219.  
  220.  
  221. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Shen Macroses %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  222. \newcommand{\w}[1]{{\hbox{\texttt{#1}}}}
  223.  
  224. \usepackage{enumitem}
  225.  
  226. \begin{document}
  227. Задачи из Шеня убраны.\\
  228. \\
  229. \\
  230.  
  231.  
  232. \pr Докажите, что для произвольной константы $c>0$ функция $g(n) = 1+c+c^2+\ldots+c^n$ есть
  233.  
  234. \begin{enumerate}[label=(\alph*)]
  235. \item $\Theta(1)$, если $c<1$;
  236. \item $\Theta(n)$, если $c=1$;
  237. \item $\Theta(c^n)$, если $c>1$.
  238. \end{enumerate}
  239.  
  240. Решение:
  241. \begin{enumerate}[label=(\alph*)]
  242. \item если $c<1$ , то $g(n) = 1+c+c^2+\ldots+c^n \rightarrow \frac{1}{1-c}$ при $ n \rightarrow \infty $, тогда для $ f(n) = 1 $\\
  243. $ \exists n_0 =1 , C_1 = 1 , C_2= \frac{2}{1-c} $ : $ 0 \leq 1 \leq \frac{1}{1-c} \leq \frac{2}{1-c} \Rightarrow g(n) = \Theta(1)$
  244. \item если $c=1$ , то $g(n) = 1+1+1^2+\ldots+1^n = n + 1 $ , тогда для $ f(n) = n $ \\
  245. $ \exists n_0 = 2 , C_1 = 1, C_2= 2 $ : $ 0 \leq n \leq n+1 \leq 2n \Rightarrow g(n) = \Theta(n)$
  246. \item если $c>1$ , то $g(n) = 1+c+c^2+\ldots+c^n = 1 * \frac{1-c^n}{1-c} = \frac{c^n-1}{c-1}$ ,тогда для $ f(n) = c^n $ \\
  247. $ \exists n_0 = 2 , C_1 = \frac{1}{c}, C_2= \frac{1}{c-1} $ : $ 0 \leq c^{n-1} \leq \frac{c^n-1}{c-1} \leq \frac{c^n}{c-1} \Rightarrow g(n) = \Theta(c^n)$
  248. \end{enumerate}
  249.  
  250.  
  251. \pr Дано три отсортированных по возрастанию массива, внутри каждого массива все элементы различные. Предложите линейный алгоритм нахождения числа различных элементов в объединении массивов.\\
  252. Решение: \\
  253. 1) Алгоритм.\\
  254. Пусть $ a[n],b[m],c[k] $-массивы, данные по условию. Тогда для решения задачи будем использовать следующий алгоритм: сначала создадим четвертый массив $ d[p] $,затем при поступлении $ a[0],b[0],c[0] $ находим минимальный из них ($ q=min(a[0],b[0],c[0]) $)и записываем его в $ d[0] $. В том массиве в котором мы нашли минимальный из трех элементов перемещаем счетчик на 1 вправо и ищем минимальный уже между ними. Если какой то элемент из массивов равен предыдущему в массиве d, просто пропускаем и перемещаем счетчик. При этом, если размеры массивов не совпадают, то неопределенные элементы мы будем доопределять null-ом.
  255.  
  256. Рассмотрим работу алгоритма на $ i $ шаге. В массиве d на $ i-1 $ лежит какое-то число $\ne NULL$. Пусть программа считывает на данном этапе $ (a[i_{1}],b[i_{2}],c[i_{3}]) $, далее находим минимум из этой тройки, пусть это $ a[i_{1}] $, далее сравниваем $ a[i_{1}] $ с $ d[i-1] $, если $ a[i_{1}] \ne d[i-1] $, то $ d[i]:=a[i_{1}] $ и программа переходит к следующему этапу, т.е. сравнивает между собой уже $ (a[i_{1}+1],b[i_{2}],c[i_{3}]) $. Если же $ a[i_{1}] = d[i-1] $, то программа ищет минимум уже среди $b[i_{2}],c[i_{3}]) $ пусть это-$b[i_{2}]$, тогда аналогично сравниваем $b[i_{2}]$ с $ d[i] $, если $ b[i_{2}] \ne d[i-1] $, то $ d[i]:=b[i_{2}] $ и программа переходит к следующему этапу. Если же $ b[i_{2}] = d[i-1] $, то сравниваем $ c[i_{3}] $ с $ d[i-1] $, если $ c[i_{3}] \ne d[i-1] $, то $d[i] = c[i_{3}] $ , если же $(a[i_{1}]=b[i_{2}]=c[i_{3}])=d[i-1]\ne +\infty $,то переходим к следующему этапу, на котором ищем минимум уже среди $a[i_{1}+1],b[i_{2}+1],c[i_{3}+1]) $, при этом если на каком то этапе получается что $a[i_{1}]=b[i_{2}]=c[i_{3}]=NULL $, то программа завершает работу и выдает в качетсве ответа номер крайнего элемента в массиве d плюс один.
  257.  
  258. 2) Корректность.\\
  259. Алгоритм корректен, т.к. в результате его работы получается отсортированный по возрастанию массив множества элементов, которое является объединением множеств элементов исходных массивов. Не добавить какой-либо элемент в массив d алгоритм не может, тк элемент не добавляется в массив только в том случае, если равный ему элемент уже есть в массиве d. Размер d - число различных элементов в объединении массивов. \\
  260. Так же стоит добавить , что для поиска , именно , количества , не обязательно использовать массив , можно просто завести счётчик и хранить в пременной значение d[i-1] на i-том шаге. \\
  261. 3) Оценка.\\
  262. Алгоритм линеен, тк содержит не более $ n+m+k $ шагов, при этом на каждом шаге выполняется константное число операций.
  263.  
  264.  
  265.  
  266. \pr На вход подаётся последовательность чисел $a_1, b_1, a_2, b_2, \ldots, a_n, b_n$. Постройте онлайн-алгоритм, который вычисляет сумму~$\sum\limits_{ i\neq j} a_i\times b_j$.\\
  267. Решение: \\1)Алгоритм. В начале $ sum = 0 $ ( $ sum = \sum\limits_{ i\neq j}^k a_i\times b_j $ ) , $ sum(a) = 0 $ ( $ sum(a) = \sum\limits_{i=1}^{k} a_i$ ) , $ sum(b) = 0 $ ( $ sum(b) = \sum\limits_{j=1}^{k} b_i$ ) . На каждом $k$-том шаге алгоритм будет прибавлять к $ sum $ произведения $a_k * sum(b)$ ( $ sum(b) = \sum\limits_{i=1}^{k-1} b_i $ ) и $b_k *sum(a) $ ( $sum(a) = \sum\limits_{i=1}^{k-1} a_i$ ) , далее он будет увеличивать $sum(a)$ и $ sum(b) $ : $sum(a) = sum(a) + a_k $ , $sum(b) = sum(b) + b_k $ .
  268. \\
  269. 2)Корректность. Докажем по индукции: Для n = 2 - верно . Допустим верно для n , тогда для n + 1 тоже должно быть верно. Для n+1 : $ sum = \sum\limits_{ i\neq j}^n a_i\times b_j + a_{n+1} * \sum\limits_{j=1}^{n} b_i + b_{n+1} *\sum\limits_{i=1}^{n} a_i = a_1*\sum\limits_{j \neq 1}^{n+1} b_j + a_2*\sum\limits_{j \neq 2}^{n+1} b_j + ... + a_n*\sum\limits_{j \neq n}^{n+1} b_j + a_{n+1}*\sum\limits_{j \neq n+1}^{n+1} b_j = \sum\limits_{ i\neq j}^{n+1} a_i\times b_j $ - верно \\
  270. 3)Оценка: \\
  271. По памяти - константное число переменных $ \Rightarrow $ $ \theta(1) $\\
  272. По времени - за каждый шаг алгоритм выполняет константное число операций $ \Rightarrow $ зависит только от числа шагов $ \Rightarrow $ $ \theta(n) $
  273.  
  274.  
  275. \pr Дана последовательность целых чисел $a_1,a_2,\dots,a_n$. Необходимо найти её самую длинную строго возрастающую подпоследовательность.
  276. Предложите \prsubr $O(n^2)$ алгоритм (докажите его корректность и асимптотику);\\
  277. Решение: \\1) Алгоритм :\\
  278. int c , maxlength = 1 , length = 1 ; ( c - будет хранить значение $ a_{i-1} $ , maxlenght - будет хранить максимальную длину ,lenght - будет хранить текущую длину )\\
  279. for( int i = 1 ; i $ \leq $ n-1 ; i++ ) $ \lbrace $\\
  280. c = $ a_i $;\\
  281. \\
  282. for( int j = i+1 ; j $ \leq $ n ; j++ ) $ \lbrace $\\
  283. if( с > $ a_{j} $)$ \lbrace $ length++ ; с = $a_{i}$; $ \rbrace $\\
  284. $ \rbrace $\\
  285. \\
  286. if( lenght > maxlength)$ \lbrace $ maxlength = length ;$ \rbrace $\\
  287. $ \rbrace $\\
  288. cout << maxlenth ;\\
  289. 2) Корректность: Алгорит пройдётся по всем строго возрастающим подпоследовательностям , и выведет максимальную дилину $ \Rightarrow $ алгоритм корректен\\
  290. 3) Оценка по времени : по времени получается $ f(n) = \sum\limits_{i = 1}^{n-1} ( const_2 * \sum\limits_{j = i}^{n} const_1 )= \theta(n^2) $ \\
  291. т.к $ \sum\limits_{j = i}^{n} const_1 = const_1 * ( n - i ) = const_1 * n - const_1 * i $ тогда $ \sum\limits_{i = 1}^{n-1} (const_2 *const_1 * n - const_2 *const_1 * i) = const_2 *const_1 * \frac{n^2}{2} - const_2 *const_1 * (n-1) = f(n) $ \\
  292. $ \exists n_0 = 3 , C_1 = const_2 *const_1*\frac{1}{6} , C_2 = const_2 *const_1*\frac{1}{2} : C_1*n^2 \leq f(n) \leq C_2 * n^2 $
  293.  
  294.  
  295. \prstar На вход подаётся последовательность натуральных чисел $x_1, \ldots x_n$ в которой один из элементов встречается строго больше, чем $\frac{n}{2}$ раз. Постройте алгоритм, который находит этот элемент, и при этом может использовать в качестве внешней памяти только стек (в который можно помещать только элементы последовательности), операции со стеком стоят $O(1)$ времени; в оперативной памяти программа использует $O(1)$ битов памяти и $O(1)$ регистров (в каждом из которых может храниться число $x_i$).
  296.  
  297. Числа $x_i$ идут потоком данных на вход и каждое доступно для считывания только один раз~"--- вернуться обратиться к прочитанным ранее числам можно, только если сохранить их в памяти.
  298.  
  299. \prstar Дано натуральное $N$. Подсчитайте количество решений неравенства $a^2 + b^2 + c^2 + d^2 <$\linebreak$< N$ в~натуральных (неотрицательных целых) числах, не используя операций с~вещественными числами. Требуется предложить линейный (с асимптотикой $O(N)$) алгоритм.
  300.  
  301.  
  302. \end{document}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement