Блог пользователя vfleaking

Автор vfleaking, 12 лет назад, перевод, По-русски

Поздравляю всех с днем защиты детей!

Наверное, вы задаете себе вопрос: как отпраздновать этот необычный праздник? Конечно, написать очередной Codeforces Round — самый лучший выбор!

Сегодня главным героем задач будет маленький ребенок. Он столкнулся с огромным количеством алгоритмических задач, сможете ли вы помочь ему?

Приглашаем вас поучаствовать в Codeforces Round #250, который состоится в 17:00 первого июня в день защиты детей. Соревнование будет проводиться для участников обоих дивизионов.

Обратите внимание на необычное время начала раунда. Вероятно, вам интересно почему время раунда не стандартное? Все потому что это очередной раунд, подготовленный командой авторов из Китая! Мы постарались приготовить для вас много интересных задач. Вы заинтригованы? Тогда не пропускайте раунд!

Соревнование подготовлено группой авторов: delayyy, Picks и я. Это наш первый раунд Codeforces~~~~.

Большое спасибо Gerald, за помощь с подготовкой раунда; а также спасибо ftiasch, Kissshot и EvenImage, они тестировали задачи; традиционно благодарим MikeMirzayanov за создание замечательной платформы Codeforces.

Разбалловка для первого дивизиона: 500-1000-1500-2000-3000.

Разбалловка для второго дивизиона: 500-1500-1500-2000-2500.

Не упустите шанс поднять свой рейтинг Codeforces! Желаем вам удачи и удовольствия от решения задач!

UPD: Контест завершен! Поздравляем победителей!

Top 5 участников Div. 1:

  1. Alex_2oo8

  2. Petr

  3. Dmitry_Egorov

  4. TankEngineer

  5. al13n

Top 5 участников Div. 2:

  1. tohdon

  2. KFDong

  3. function348

  4. 104325EA

  5. Boyuede1

К сожалению, никто не решил задачу E в обоих дивизионах. Очень жаль....

Разбор будет опубликован очень скоро.

UPD2: Разбор задач

  • Проголосовать: нравится
  • +557
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
← Rev. 3  
Проголосовать: нравится +3 Проголосовать: не нравится

cin >> A long long time ago, there is a child who is our friend.

cout << A long long time ago, there was a child who was our friend.

/* UPD: Thanks for the Round :).

Good luck and have fun all */

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +17 Проголосовать: не нравится

So fast announcement of the score distribution!

»
12 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +5 Проголосовать: не нравится

"Just participate in this contest and write code fast and nicely, and you will take the high rating home!"

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится

Happy to see a new template for the round announcement instead of those formal templates with the same sentences (only changing the numbers) used for the last rounds! This round seems special. Everything is new... Wish luck for everyone!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

quite looking forward to this round.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +25 Проголосовать: не нравится

Problem E 3000...I guess it must be very hard

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Chinese Div 1 E problems with wealth 3000 are usually very hard. Let's see who will solve it..

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Is picks a person?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What about Russian language?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится

Завтра весёлый день!

  • Яндекс-Алгоритм 2014 — 5:00 — 6:40;
  • Russian Code Cup 2014 — 13:00 — 15:00;
  • Codeforces Round #250 — 17:00 — 19:00.

Где-то что-то должно получиться :)

»
12 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +16 Проголосовать: не нравится

Unleash the child coder within

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Today is my first Children's Day after my 18th birthday. I'm looking forward to having a memorable contest. Thank you very much. Good luck.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Wow, a typical Chinese style announcement. LOL

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

I think this announcement is very nice :) It seems it will be a funny round.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +10 Проголосовать: не нравится

A contest on my birthday :D Thank you very much. Good luck.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

No Chinese Discription.....Sad....

»
12 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

вопрос снят)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +22 Проголосовать: не нравится

a 3000 E …… no one can solve Chinese's E until……

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

I hope i do something better this time...All the best to everyone :)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

Obviously, the problem E is going to be a good surprise :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

vfleaking is good at I think problem E can't be solved by Ordinary people 。。

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

i thing it does not connect!

"Happy Children's Day everyone. What should you do to celebrate the special holiday?

Of course, another Codeforces Round is your best choice!"

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Problem E 3000 again... just can't imagine how hard it can be :p The same as last chinese round

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +7 Проголосовать: не нравится

My previous contest was good bye 2013. After a long time I registered today again. Then what do I see? Chinese problem setter with 3000 pointer E!! Perhaps I should postpone my first contest of 2014 till "Good Bye 2014" :p

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -10 Проголосовать: не нравится

Естественно, зоопарк связанный

Кто взял зоопарк в заложники?!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Задача A на внимательность :)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Как решать DIV1-B?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can I upvote twice? Or thrice? Please?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится

Чувствую, очередной слив =D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +23 Проголосовать: не нравится

Смотрим задачу J отсюда http://olympiads.ru/zaoch/2012-13/problems/problems-5.6.pdf

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +11 Проголосовать: не нравится

    Какая жалость. Формально я бы мог взять своё авторское решение к этой задаче и сдать его... Но я не писал контест. Сейчас ради интереса сдам в дорешку.

»
12 лет назад, скрыть # |
← Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

I'm probably going to kill the problemsetter if in Div1 250C the 6th pretest (the one almost everyone has failed in their first submission) has multiple copies of the same vertex.

I do really hope that there is another reason for my solution failing it... :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +14 Проголосовать: не нравится

A Google search on mysterious number 998244353 leads to integer FFT, maybe that's a hint to problem E, but I can't got any idea.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    That'd be finally one nice modulo that allows it. It's annoying that you can't do FFT with the most common ones, 109 + 7 and 109 + 9...

  • »
    »
    12 лет назад, скрыть # ^ |
    ← Rev. 6  
    Проголосовать: нравится 0 Проголосовать: не нравится

    That's quite possible. Note that if we were to count number of directed paths (let's say, there can be no left children), our answer would be the coefficients of the following polynomial:

    (it's easy to see if you know anything about generating functions). However, at the moment I have no idea how to generalize it to count number of trees... ;)

    • »
      »
      »
      12 лет назад, скрыть # ^ |
      ← Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится

      Okay, so let's define the generating function as follows: there are ci good binary trees of weight i. Then P(x) satisfies

      P(x) = 1 + (xc1 + xc2 + ... + xcn)P(x)2

      Explanation: every tree is either a "dead end" ("empty set"); this is this 'one' in the equation or a vertex having one of the weights: c1, ..., cn and two subtrees (maybe non-existent). Of course, each of the subtrees can be described by the same generating function P(x). That's why we have the second addend.

      However, I have no idea how to compute P(x) fast (even the m lowest coefficients)...

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      In problem E answer is the same row, but with catalanian numbers as a coefficients

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

how to solve Div-1 B?

  • »
    »
    12 лет назад, скрыть # ^ |
    ← Rev. 3  
    Проголосовать: нравится +8 Проголосовать: не нравится

    i used maximum spanning tree and disjoint set.

    cost for each edge between U and V is min(animal[U], animal[v]) .

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Then...How to get the answer in this way? I'm afraid I still don't know what to do next.

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +3 Проголосовать: не нравится

        while you build maximum spanning tree you can calculate the answer. when you add edge U-V the number of ways use this edge is ( number of nodes are reachable nodes from U in spanning tree before adding U-V) * (number of reachable nodes from V in spanning tree before adding U-V) so ans+=(cnt[U]*cnt[V])*Cost[U-V], and then you add U-V to the maximum spanning tree with updating disjoint set (like Kruskal algorithm).

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +6 Проголосовать: не нравится

    I used a Union-Find approach, where you add the nodes from largest value to smallest value. Then think about what happens when you add a new node — all nodes that are not yet connected must use a node that is at least this low. It then comes down to combining multiple adjacent components of already added nodes, think about this and you will figure it out (it`s simply multiplying the sizes together with the current node value).

    Not sure if this is intendend solution or even passes systest, but it worked on pretests.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +86 Проголосовать: не нравится

(•_•) I guess

( •_•)>⌐■-■ in this contest

(⌐■_■) we were troll'D

YEEEEAAAHHH!

Srsly, D... I wonder how many people had the same trololo solution as me: keep an interval tree that allows operation 3 and is able to find the largest number in a given interval along with its position; when performing operation 2, just keep taking out the largest number and moduling it until there are no numbers  ≥ x; sums are then handled by a Fenwick tree.

I have a nice proof of why it works: consider a number a and applying a = an = a%x on it for various x. If such an operation had any effect, then either or the next modulo that has any effect is , or it's . In the second case, , and in the third, . We can see that after 2 modulos do something, a must decrease at least 2 times, which can only repeat times. Therefore, the total number of actions for all operations of type 2 is and with lookup and related updates, plus the cost of processing the other queries, gives total time complexity . WIN!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -7 Проголосовать: не нравится

I guess it would me more correct to put Div2 C problem worth 1000 points.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +23 Проголосовать: не нравится

I am really surprised by the elegant solution for Div 1 A ( min of each end of an edge ). It's like instead of removing the nodes, we were just cutting the ropes.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +43 Проголосовать: не нравится

At the start I opened Div1 problems instead of Div2 and thought the problems look much tougher than the usual rounds. So I checked the dashboard and found 230 people had already solved A(Div2 C) so I decidded to manage it somehow and started working on it. I got the idea in a few minutes and thanks to my poor internet connection after reconnecting 2-3 times when I finally tried to submit it showed "You must be registered to submit" error. Only then did realize my mistake and finally solved my first problem C in contest time. :D Earlier I did not even read problems beyond B because I thought they are too hard for me. But after this I think I will atleast read all problems after solving A and B.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +23 Проголосовать: не нравится

3 минут не хватило, чтобы сдать Е. I am sad panda

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Prob C Div2 which is Prob A div 1 is it a greedy or DP problem ?

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    It's a "don't think hard, think smart" problem. Read the comments above before asking.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    As I thought (it might be wrong), we can add to sum minimal cost of line from a to b or from b to a for every line.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Greedy.

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      do u mean remove the nodes in decreasing order of ? if so, can u give a proof for this?
      i couldn't prove it during contest, so i just checked that it worked for all sample cases (and 2 more of my own), and implemented it!

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +1 Проголосовать: не нравится

        Yup, remove the vertices in decreasing order of vi. It's obvious that you can do it, and that this way, each edge will be removed exactly once, adding cost vi to the total. Also, when an edge is removed, it adds to the total cost v of one of its endpoints, so this greedy gives the total cost equal to this lower bound.

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
        ← Rev. 3  
        Проголосовать: нравится +13 Проголосовать: не нравится

        When we remove vertex i, we get a cost from vertex j (namely vj). Assign this cost to the edge ij. Then the total cost required is the sum of costs of all edges.

        Note that each edge is only counted once (when removing one of its endpoints; removing any other vertex doesn't affect this, and removing the second endpoint has no effect as the first endpoint has gone), and its value is the cost of one of its two endpoints. Thus we minimize the total cost by minimizing the costs of all edges, namely by choosing the smaller cost for each edge.

        When we remove the nodes in decreasing order of vi, we always assign the smaller cost to each edge. Suppose for edge ij, we assign the value vj, but vi < vj. Then we should have removed vertex j first and assigned the value vi to the edge, contradiction. Thus we have assigned the smaller cost to every edge, and thus we have obtained the smallest total cost.

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +3 Проголосовать: не нравится

          Nice explanation. I also couldn't proof it during contest.

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +8 Проголосовать: не нравится

          nice proof. thanks a lot! :)

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          I tried to find the i-th node having the minimum sum of energy of its connected j-nodes and removed the i-th node iteratively. I was wrong hoping that greedy approach would work here :( I did not think that removing minimum sum cost of connected node can have its own energy values too high and thus increasing the total cost. Still I understood my mistake and i hope i don't commit this mistake again

          • »
            »
            »
            »
            »
            »
            12 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится

            The solution is actually greedy, but in a different greedy way (take the vertex with the largest cost every time).

            Your solution fails for the following:

            3 2
            3 2 2
            1 2
            1 3
            

            A vertex with cost 3 is connected to two vertices with cost 2.

            Your solution dictates that as both of the cost-2 vertices have lower minimum sum of costs (namely 3) as opposed to the cost-3 one (namely 2 + 2 = 4), you remove one of them first. This way you get an answer of 5, while the optimal solution is 4 (remove the cost-3 vertex first).

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Как нужно было решать Div2 C?)

  • »
    »
    12 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится +1 Проголосовать: не нравится

    Надо понять, что в результате мы по одному разу возьмём каждое ребро, а к ответу прибавим одно из значений на конце каждого ребра. Тогда, чтобы минимизировать сумму, нужно всегда брать ребро за конец с максимальным значением. Что приводит нас к решению, где нужно просто на каждом шагу брать вершину с максимальным значением.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

Hi setters, I really like at least those problems I had a chance to read — A, B, C, D in DIV2, thanks ;-)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +40 Проголосовать: не нравится

Поздравляю Alex_2oo8 с первым местом o_O

Так держать!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Any hint for task D div2?

»
12 лет назад, скрыть # |
← Rev. 3  
Проголосовать: нравится +6 Проголосовать: не нравится

At first, I didn't know how to solve A and got WA twice. Then, I checked Status and noticed that the memory usage of those who passed pretests was too low. I realized that I didn't have to make an adjacency matrix XD

»
12 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Nice round. It seems that the ones who predicted there won't be any accepted solution to E where right. I want to ask what are some good materials on FFT (because Wikipedia gives a lot of probably interesting stuff, but they seem too mathy to apply in any programming contest task). Thanks in advance.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

hacking at DIV2 was like hell :D pretty contest,thanks vfleaking

»
12 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится -16 Проголосовать: не нравится

I think that the test cases for Div1D are weak because many users get accepted solutions using O(NlogN) for operations type 2. For example Petr solution: 6770456

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    It's in average, because each number X can be decreased with operation Mod only times.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    I explain it here

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    the time limit is 4 secs. And it is not O(nlogn) for operations type 2. When the maximum of an interval is smaller than the mod number, this interval can be skipped, because x%m=x, when x<m. Then if x>=m,we can get x%m<m, so the number decrease very fast.

  • »
    »
    12 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    That's because a number won't be done modulo operation efficaciously too many times.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Solution of 1D works in O(MlogNlogMAX) , we can use potential method to prove it. Let's assign the potential of number P be logP, then if that number is changed by operation 2 its potential decreases at least 1. And then build an interval tree which supports dynamic RMQ problem, and while working on operation type 2 first check if the maximum element in range(l,r) >= M, then process it on that number, until such number doesn't exist in asked range.

    We can see that:

    Initially: the potential of the sequence <= NlogMAX

    Operation 1: costs O(logN) time, and potential doesn't change. Amortized complexity = O(logN).

    Operation 3: costs O(logN) time, and potential increases at most logMAX, as we need O(logN) time to clear 1 unit of potential, amortized complexity is O(logN + logNlogMAX).

    Operation 2: We need O(logN) time to check the maximum <= M, and because the time to clear potential is included in operation 3, this is not counted in total time.

    Summing up all these cases gives us O(MlogNlogMAX) total time complexity

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -17 Проголосовать: не нравится

Мне неясно почему в задаче A DIV.2 в 28 тесте ответ С, а не A?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

BOOOOOOOP!

I just found out what my WA in div1 B was about. I forgot to add 1LL* once...

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

I finish my div1D code at 1:59:59, and submit it...then unfortunately,out of time,just a second.... then after system test....I submit it again, accepted.what a sad story...

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Problem Div1 C is similar to this problem Ears Cutting

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I used a DP solution for DIV2 B to collect the sum which gave TLE at system test

and i thought of DIV2 C as a graph problem

I wasn't pretty sure about disconnecting the node which has a minimum-cost neighbors, maximum neighbors or the node which has maximum cost and none of them gave me optimal solution.

i'm going really down today but Great contest!.

Lesson learned, Never overestimate the problem!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

please update the ratings soon

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Very nice contest in this special day. Problems was very interesnting to solve, and the div 2 A problem was like a bomb for hacking. I want more contest from you vfleaking

»
12 лет назад, скрыть # |
← Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

подскажите почему в задаче А вот такой тест дает ответ А

сам тест

A.aaaa

B.aa

C.a

D.a

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    "Why the answer is A and not C?" -- Google Translate

    C and D aren't great, because the 1-character C is not twice shorter than the 1-character D. However, if we modify the case:

    A.aaaa
    B.aa
    C.aa
    D.a
    

    Then yes, A and D are both great, and so the answer is C.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What is the complexity of optimal solution for Div2B?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

why have you added test case on div 2 B problem after the contest

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

the sad thing is that the only one who submit E problem got WR in testcase 15 :(

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

im not convinced with the solution of problem C Div2 does any one has any proof for it ??

»
12 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +2 Проголосовать: не нравится

my rating was not changed :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +22 Проголосовать: не нравится
»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Wow, kids from China. such a great round!