Skip to content

Commit 0a9fe2d

Browse files
author
Shuo
authored
Merge pull request #771 from openset/develop
Add: new
2 parents c0a5ddf + ad29f32 commit 0a9fe2d

File tree

19 files changed

+352
-20
lines changed

19 files changed

+352
-20
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ LeetCode Problems' Solutions
6262

6363
| # | Title | Solution | Difficulty |
6464
| :-: | - | - | :-: |
65+
| <span id="1397">1397</span> | [Find All Good Strings](https://leetcode.com/problems/find-all-good-strings "找到所有好字符串") | [Go](problems/find-all-good-strings) | Hard |
66+
| <span id="1396">1396</span> | [Design Underground System](https://leetcode.com/problems/design-underground-system "设计地铁系统") | [Go](problems/design-underground-system) | Medium |
67+
| <span id="1395">1395</span> | [Count Number of Teams](https://leetcode.com/problems/count-number-of-teams "统计作战单位数") | [Go](problems/count-number-of-teams) | Medium |
68+
| <span id="1394">1394</span> | [Find Lucky Integer in an Array](https://leetcode.com/problems/find-lucky-integer-in-an-array "找出数组中的幸运数") | [Go](problems/find-lucky-integer-in-an-array) | Easy |
69+
| <span id="1393">1393</span> | [Capital Gain/Loss](https://leetcode.com/problems/capital-gainloss) 🔒 | [MySQL](problems/capital-gainloss) | Medium |
6570
| <span id="1392">1392</span> | [Longest Happy Prefix](https://leetcode.com/problems/longest-happy-prefix "最长快乐前缀") | [Go](problems/longest-happy-prefix) | Hard |
6671
| <span id="1391">1391</span> | [Check if There is a Valid Path in a Grid](https://leetcode.com/problems/check-if-there-is-a-valid-path-in-a-grid "检查网格中是否存在有效路径") | [Go](problems/check-if-there-is-a-valid-path-in-a-grid) | Medium |
6772
| <span id="1390">1390</span> | [Four Divisors](https://leetcode.com/problems/four-divisors "四因数") | [Go](problems/four-divisors) | Medium |
@@ -455,7 +460,7 @@ LeetCode Problems' Solutions
455460
| <span id="1002">1002</span> | [Find Common Characters](https://leetcode.com/problems/find-common-characters "查找常用字符") | [Go](problems/find-common-characters) | Easy |
456461
| <span id="1001">1001</span> | [Grid Illumination](https://leetcode.com/problems/grid-illumination "网格照明") | [Go](problems/grid-illumination) | Hard |
457462
| <span id="1000">1000</span> | [Minimum Cost to Merge Stones](https://leetcode.com/problems/minimum-cost-to-merge-stones "合并石头的最低成本") | [Go](problems/minimum-cost-to-merge-stones) | Hard |
458-
| <span id="999">999</span> | [Available Captures for Rook](https://leetcode.com/problems/available-captures-for-rook "车的可用捕获量") | [Go](problems/available-captures-for-rook) | Easy |
463+
| <span id="999">999</span> | [Available Captures for Rook](https://leetcode.com/problems/available-captures-for-rook "可以被一步捕获的棋子数") | [Go](problems/available-captures-for-rook) | Easy |
459464
| <span id="998">998</span> | [Maximum Binary Tree II](https://leetcode.com/problems/maximum-binary-tree-ii "最大二叉树 II") | [Go](problems/maximum-binary-tree-ii) | Medium |
460465
| <span id="997">997</span> | [Find the Town Judge](https://leetcode.com/problems/find-the-town-judge "找到小镇的法官") | [Go](problems/find-the-town-judge) | Easy |
461466
| <span id="996">996</span> | [Number of Squareful Arrays](https://leetcode.com/problems/number-of-squareful-arrays "正方形数组的数目") | [Go](problems/number-of-squareful-arrays) | Hard |

problems/available-captures-for-rook/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
[Next >](../minimum-cost-to-merge-stones "Minimum Cost to Merge Stones")
1111

12-
## [999. Available Captures for Rook (Easy)](https://leetcode.com/problems/available-captures-for-rook "车的可用捕获量")
12+
## [999. Available Captures for Rook (Easy)](https://leetcode.com/problems/available-captures-for-rook "可以被一步捕获的棋子数")
1313

1414
<p>On an 8 x 8 chessboard, there is one white rook.&nbsp; There also may be empty squares, white bishops, and black pawns.&nbsp; These are given as characters &#39;R&#39;, &#39;.&#39;, &#39;B&#39;, and &#39;p&#39; respectively. Uppercase characters represent white pieces, and lowercase characters represent black pieces.</p>
1515

problems/bus-routes/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ T = 6
2626
The best strategy is take the first bus to the bus stop 7, then take the second bus to the bus stop 6.
2727
</pre>
2828

29-
<p><strong>Note: </strong></p>
29+
<p>&nbsp;</p>
30+
<p><strong>Constraints:</strong></p>
3031

3132
<ul>
3233
<li><code>1 &lt;= routes.length &lt;= 500</code>.</li>
33-
<li><code>1 &lt;= routes[i].length &lt;= 500</code>.</li>
34+
<li><code>1 &lt;= routes[i].length &lt;= 10^5</code>.</li>
3435
<li><code>0 &lt;= routes[i][j] &lt; 10 ^ 6</code>.</li>
3536
</ul>
3637

problems/capital-gainloss/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!--|This file generated by command(leetcode description); DO NOT EDIT. |-->
2+
<!--+----------------------------------------------------------------------+-->
3+
<!--|@author openset <openset.wang@gmail.com> |-->
4+
<!--|@link https://github.com/openset |-->
5+
<!--|@home https://github.com/openset/leetcode |-->
6+
<!--+----------------------------------------------------------------------+-->
7+
8+
[< Previous](../longest-happy-prefix "Longest Happy Prefix")
9+
                
10+
[Next >](../find-lucky-integer-in-an-array "Find Lucky Integer in an Array")
11+
12+
## [1393. Capital Gain/Loss (Medium)](https://leetcode.com/problems/capital-gainloss "")
13+
14+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Create Table If Not Exists Stocks (stock_name varchar(15), operation ENUM('Sell', 'Buy'), operation_day int, price int);
2+
Truncate table Stocks;
3+
insert into Stocks (stock_name, operation, operation_day, price) values ('Leetcode', 'Buy', '1', '1000');
4+
insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Buy', '2', '10');
5+
insert into Stocks (stock_name, operation, operation_day, price) values ('Leetcode', 'Sell', '5', '9000');
6+
insert into Stocks (stock_name, operation, operation_day, price) values ('Handbags', 'Buy', '17', '30000');
7+
insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Sell', '3', '1010');
8+
insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Buy', '4', '1000');
9+
insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Sell', '5', '500');
10+
insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Buy', '6', '1000');
11+
insert into Stocks (stock_name, operation, operation_day, price) values ('Handbags', 'Sell', '29', '7000');
12+
insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Sell', '10', '10000');
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<!--|This file generated by command(leetcode description); DO NOT EDIT. |-->
2+
<!--+----------------------------------------------------------------------+-->
3+
<!--|@author openset <openset.wang@gmail.com> |-->
4+
<!--|@link https://github.com/openset |-->
5+
<!--|@home https://github.com/openset/leetcode |-->
6+
<!--+----------------------------------------------------------------------+-->
7+
8+
[< Previous](../find-lucky-integer-in-an-array "Find Lucky Integer in an Array")
9+
                
10+
[Next >](../design-underground-system "Design Underground System")
11+
12+
## [1395. Count Number of Teams (Medium)](https://leetcode.com/problems/count-number-of-teams "统计作战单位数")
13+
14+
<p>There are&nbsp;<code>n</code>&nbsp;soldiers standing in a line. Each soldier is assigned a <strong>unique</strong> <code>rating</code> value.</p>
15+
16+
<p>You have to form a team of 3 soldiers&nbsp;amongst them under the following rules:</p>
17+
18+
<ul>
19+
<li>Choose 3 soldiers with index (<code>i</code>, <code>j</code>, <code>k</code>) with&nbsp;rating (<code>rating[i]</code>, <code>rating[j]</code>, <code>rating[k]</code>).</li>
20+
<li>A team is valid if:&nbsp; (<code>rating[i] &lt; rating[j] &lt; rating[k]</code>) or (<code>rating[i] &gt; rating[j] &gt; rating[k]</code>) where (<code>0&nbsp;&lt;= i &lt;&nbsp;j &lt;&nbsp;k &lt;&nbsp;n</code>).</li>
21+
</ul>
22+
23+
<p>Return the number of teams you can form given the conditions. (soldiers can be part of multiple teams).</p>
24+
25+
<p>&nbsp;</p>
26+
<p><strong>Example 1:</strong></p>
27+
28+
<pre>
29+
<strong>Input:</strong> rating = [2,5,3,4,1]
30+
<strong>Output:</strong> 3
31+
<strong>Explanation:</strong> We can form three teams given the conditions. (2,3,4), (5,4,1), (5,3,1).
32+
</pre>
33+
34+
<p><strong>Example 2:</strong></p>
35+
36+
<pre>
37+
<strong>Input:</strong> rating = [2,1,3]
38+
<strong>Output:</strong> 0
39+
<strong>Explanation:</strong> We can&#39;t form any team given the conditions.
40+
</pre>
41+
42+
<p><strong>Example 3:</strong></p>
43+
44+
<pre>
45+
<strong>Input:</strong> rating = [1,2,3,4]
46+
<strong>Output:</strong> 4
47+
</pre>
48+
49+
<p>&nbsp;</p>
50+
<p><strong>Constraints:</strong></p>
51+
52+
<ul>
53+
<li><code>n == rating.length</code></li>
54+
<li><code>1 &lt;= n &lt;= 200</code></li>
55+
<li><code>1 &lt;= rating[i] &lt;= 10^5</code></li>
56+
</ul>
57+
58+
### Related Topics
59+
[[Array](../../tag/array/README.md)]
60+
61+
### Hints
62+
<details>
63+
<summary>Hint 1</summary>
64+
BruteForce, check all possibilities.
65+
</details>
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<!--|This file generated by command(leetcode description); DO NOT EDIT. |-->
2+
<!--+----------------------------------------------------------------------+-->
3+
<!--|@author openset <openset.wang@gmail.com> |-->
4+
<!--|@link https://github.com/openset |-->
5+
<!--|@home https://github.com/openset/leetcode |-->
6+
<!--+----------------------------------------------------------------------+-->
7+
8+
[< Previous](../count-number-of-teams "Count Number of Teams")
9+
                
10+
[Next >](../find-all-good-strings "Find All Good Strings")
11+
12+
## [1396. Design Underground System (Medium)](https://leetcode.com/problems/design-underground-system "设计地铁系统")
13+
14+
<p>Implement the class <code>UndergroundSystem</code> that supports three methods:</p>
15+
16+
<p>1.<code>&nbsp;checkIn(int id, string stationName, int t)</code></p>
17+
18+
<ul>
19+
<li>A customer with id card equal to <code>id</code>, gets in the station <code>stationName</code> at time <code>t</code>.</li>
20+
<li>A customer&nbsp;can only be checked into one place at a time.</li>
21+
</ul>
22+
23+
<p>2.<code>&nbsp;checkOut(int id, string stationName, int t)</code></p>
24+
25+
<ul>
26+
<li>A customer with id card equal to <code>id</code>, gets out from the station <code>stationName</code> at time <code>t</code>.</li>
27+
</ul>
28+
29+
<p>3.&nbsp;<code>getAverageTime(string startStation, string endStation)</code>&nbsp;</p>
30+
31+
<ul>
32+
<li>Returns the average time to travel between the <code>startStation</code> and the <code>endStation</code>.</li>
33+
<li>The average time is computed from all the previous traveling from <code>startStation</code> to <code>endStation</code> that happened <strong>directly</strong>.</li>
34+
<li>Call to <code>getAverageTime</code> is always valid.</li>
35+
</ul>
36+
37+
<p>You can assume all calls to <code>checkIn</code> and <code>checkOut</code> methods are consistent. That is, if a customer gets in at time <strong>t<sub>1</sub></strong> at some station, then it gets out at time <strong>t<sub>2</sub></strong> with <strong>t<sub>2</sub> &gt; t<sub>1</sub></strong>.&nbsp;All events happen in chronological order.</p>
38+
39+
<p>&nbsp;</p>
40+
<p><strong>Example 1:</strong></p>
41+
42+
<pre>
43+
<strong>Input</strong>
44+
[&quot;UndergroundSystem&quot;,&quot;checkIn&quot;,&quot;checkIn&quot;,&quot;checkIn&quot;,&quot;checkOut&quot;,&quot;checkOut&quot;,&quot;checkOut&quot;,&quot;getAverageTime&quot;,&quot;getAverageTime&quot;,&quot;checkIn&quot;,&quot;getAverageTime&quot;,&quot;checkOut&quot;,&quot;getAverageTime&quot;]
45+
[[],[45,&quot;Leyton&quot;,3],[32,&quot;Paradise&quot;,8],[27,&quot;Leyton&quot;,10],[45,&quot;Waterloo&quot;,15],[27,&quot;Waterloo&quot;,20],[32,&quot;Cambridge&quot;,22],[&quot;Paradise&quot;,&quot;Cambridge&quot;],[&quot;Leyton&quot;,&quot;Waterloo&quot;],[10,&quot;Leyton&quot;,24],[&quot;Leyton&quot;,&quot;Waterloo&quot;],[10,&quot;Waterloo&quot;,38],[&quot;Leyton&quot;,&quot;Waterloo&quot;]]
46+
47+
<strong>Output</strong>
48+
[null,null,null,null,null,null,null,14.0,11.0,null,11.0,null,12.0]
49+
50+
<strong>Explanation</strong>
51+
UndergroundSystem undergroundSystem = new UndergroundSystem();
52+
undergroundSystem.checkIn(45, &quot;Leyton&quot;, 3);
53+
undergroundSystem.checkIn(32, &quot;Paradise&quot;, 8);
54+
undergroundSystem.checkIn(27, &quot;Leyton&quot;, 10);
55+
undergroundSystem.checkOut(45, &quot;Waterloo&quot;, 15);
56+
undergroundSystem.checkOut(27, &quot;Waterloo&quot;, 20);
57+
undergroundSystem.checkOut(32, &quot;Cambridge&quot;, 22);
58+
undergroundSystem.getAverageTime(&quot;Paradise&quot;, &quot;Cambridge&quot;); // return 14.0. There was only one travel from &quot;Paradise&quot; (at time 8) to &quot;Cambridge&quot; (at time 22)
59+
undergroundSystem.getAverageTime(&quot;Leyton&quot;, &quot;Waterloo&quot;); // return 11.0. There were two travels from &quot;Leyton&quot; to &quot;Waterloo&quot;, a customer with id=45 from time=3 to time=15 and a customer with id=27 from time=10 to time=20. So the average time is ( (15-3) + (20-10) ) / 2 = 11.0
60+
undergroundSystem.checkIn(10, &quot;Leyton&quot;, 24);
61+
undergroundSystem.getAverageTime(&quot;Leyton&quot;, &quot;Waterloo&quot;); // return 11.0
62+
undergroundSystem.checkOut(10, &quot;Waterloo&quot;, 38);
63+
undergroundSystem.getAverageTime(&quot;Leyton&quot;, &quot;Waterloo&quot;); // return 12.0</pre>
64+
65+
<p>&nbsp;</p>
66+
<p><strong>Constraints:</strong></p>
67+
68+
<ul>
69+
<li>There will be at most <code><font face="monospace">20000</font></code>&nbsp;operations.</li>
70+
<li><code>1 &lt;= id, t &lt;= 10^6</code></li>
71+
<li>All strings consist of uppercase, lowercase English letters and digits.</li>
72+
<li><code>1 &lt;=&nbsp;stationName.length &lt;= 10</code></li>
73+
<li>Answers within&nbsp;<code>10^-5</code>&nbsp;of the actual value will be accepted as correct.</li>
74+
</ul>
75+
76+
### Related Topics
77+
[[Design](../../tag/design/README.md)]
78+
79+
### Hints
80+
<details>
81+
<summary>Hint 1</summary>
82+
Use two hash tables. The first to save the check-in time for a customer and the second to update the total time between two stations.
83+
</details>
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<!--|This file generated by command(leetcode description); DO NOT EDIT. |-->
2+
<!--+----------------------------------------------------------------------+-->
3+
<!--|@author openset <openset.wang@gmail.com> |-->
4+
<!--|@link https://github.com/openset |-->
5+
<!--|@home https://github.com/openset/leetcode |-->
6+
<!--+----------------------------------------------------------------------+-->
7+
8+
[< Previous](../design-underground-system "Design Underground System")
9+
                
10+
Next >
11+
12+
## [1397. Find All Good Strings (Hard)](https://leetcode.com/problems/find-all-good-strings "找到所有好字符串")
13+
14+
<p>Given the strings <code>s1</code> and <code>s2</code> of size <code>n</code>, and the string <code>evil</code>. <em>Return the number of <strong>good</strong> strings</em>.</p>
15+
16+
<p>A <strong>good</strong> string has size <code>n</code>, it is alphabetically greater than or equal to <code>s1</code>, it is alphabetically smaller than or equal to <code>s2</code>, and it does not contain the string <code>evil</code> as a substring. Since the answer can be a huge number, return this modulo 10^9 + 7.</p>
17+
18+
<p>&nbsp;</p>
19+
<p><strong>Example 1:</strong></p>
20+
21+
<pre>
22+
<strong>Input:</strong> n = 2, s1 = &quot;aa&quot;, s2 = &quot;da&quot;, evil = &quot;b&quot;
23+
<strong>Output:</strong> 51
24+
<strong>Explanation:</strong> There are 25 good strings starting with &#39;a&#39;: &quot;aa&quot;,&quot;ac&quot;,&quot;ad&quot;,...,&quot;az&quot;. Then there are 25 good strings starting with &#39;c&#39;: &quot;ca&quot;,&quot;cc&quot;,&quot;cd&quot;,...,&quot;cz&quot; and finally there is one good string starting with &#39;d&#39;: &quot;da&quot;.&nbsp;
25+
</pre>
26+
27+
<p><strong>Example 2:</strong></p>
28+
29+
<pre>
30+
<strong>Input:</strong> n = 8, s1 = &quot;leetcode&quot;, s2 = &quot;leetgoes&quot;, evil = &quot;leet&quot;
31+
<strong>Output:</strong> 0
32+
<strong>Explanation:</strong> All strings greater than or equal to s1 and smaller than or equal to s2 start with the prefix &quot;leet&quot;, therefore, there is not any good string.
33+
</pre>
34+
35+
<p><strong>Example 3:</strong></p>
36+
37+
<pre>
38+
<strong>Input:</strong> n = 2, s1 = &quot;gx&quot;, s2 = &quot;gz&quot;, evil = &quot;x&quot;
39+
<strong>Output:</strong> 2
40+
</pre>
41+
42+
<p>&nbsp;</p>
43+
<p><strong>Constraints:</strong></p>
44+
45+
<ul>
46+
<li><code>s1.length == n</code></li>
47+
<li><code>s2.length == n</code></li>
48+
<li><code>1 &lt;= n &lt;= 500</code></li>
49+
<li><code>1 &lt;= evil.length &lt;= 50</code></li>
50+
<li>All strings consist of lowercase English letters.</li>
51+
</ul>
52+
53+
### Related Topics
54+
[[Dynamic Programming](../../tag/dynamic-programming/README.md)]
55+
56+
### Hints
57+
<details>
58+
<summary>Hint 1</summary>
59+
Use DP with 4 states (pos: Int, posEvil: Int, equalToS1: Bool, equalToS2: Bool) which compute the number of valid strings of size "pos" where the maximum common suffix with string "evil" has size "posEvil". When "equalToS1" is "true", the current valid string is equal to "S1" otherwise it is greater. In a similar way when equalToS2 is "true" the current valid string is equal to "S2" otherwise it is smaller.
60+
</details>
61+
62+
<details>
63+
<summary>Hint 2</summary>
64+
To update the maximum common suffix with string "evil" use KMP preprocessing.
65+
</details>
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<!--|This file generated by command(leetcode description); DO NOT EDIT. |-->
2+
<!--+----------------------------------------------------------------------+-->
3+
<!--|@author openset <openset.wang@gmail.com> |-->
4+
<!--|@link https://github.com/openset |-->
5+
<!--|@home https://github.com/openset/leetcode |-->
6+
<!--+----------------------------------------------------------------------+-->
7+
8+
[< Previous](../capital-gainloss "Capital Gain/Loss")
9+
                
10+
[Next >](../count-number-of-teams "Count Number of Teams")
11+
12+
## [1394. Find Lucky Integer in an Array (Easy)](https://leetcode.com/problems/find-lucky-integer-in-an-array "找出数组中的幸运数")
13+
14+
<p>Given an array of integers <code>arr</code>, a lucky integer is an integer which has a frequency in the array equal to its value.</p>
15+
16+
<p>Return <i>a lucky integer</i>&nbsp;in the array. If there are multiple lucky integers return the <strong>largest</strong> of them. If there is no lucky&nbsp;integer return <strong>-1</strong>.</p>
17+
18+
<p>&nbsp;</p>
19+
<p><strong>Example 1:</strong></p>
20+
21+
<pre>
22+
<strong>Input:</strong> arr = [2,2,3,4]
23+
<strong>Output:</strong> 2
24+
<strong>Explanation:</strong> The only lucky number in the array is 2 because frequency[2] == 2.
25+
</pre>
26+
27+
<p><strong>Example 2:</strong></p>
28+
29+
<pre>
30+
<strong>Input:</strong> arr = [1,2,2,3,3,3]
31+
<strong>Output:</strong> 3
32+
<strong>Explanation:</strong> 1, 2 and 3 are all lucky numbers, return the largest of them.
33+
</pre>
34+
35+
<p><strong>Example 3:</strong></p>
36+
37+
<pre>
38+
<strong>Input:</strong> arr = [2,2,2,3,3]
39+
<strong>Output:</strong> -1
40+
<strong>Explanation:</strong> There are no lucky numbers in the array.
41+
</pre>
42+
43+
<p><strong>Example 4:</strong></p>
44+
45+
<pre>
46+
<strong>Input:</strong> arr = [5]
47+
<strong>Output:</strong> -1
48+
</pre>
49+
50+
<p><strong>Example 5:</strong></p>
51+
52+
<pre>
53+
<strong>Input:</strong> arr = [7,7,7,7,7,7,7]
54+
<strong>Output:</strong> 7
55+
</pre>
56+
57+
<p>&nbsp;</p>
58+
<p><strong>Constraints:</strong></p>
59+
60+
<ul>
61+
<li><code>1 &lt;= arr.length &lt;= 500</code></li>
62+
<li><code>1 &lt;= arr[i] &lt;= 500</code></li>
63+
</ul>
64+
65+
### Related Topics
66+
[[Array](../../tag/array/README.md)]
67+
68+
### Hints
69+
<details>
70+
<summary>Hint 1</summary>
71+
Count the frequency of each integer in the array.
72+
</details>
73+
74+
<details>
75+
<summary>Hint 2</summary>
76+
Get all lucky numbers and return the largest of them.
77+
</details>

0 commit comments

Comments
 (0)