         
         <p>Moreover, you should always be critical of any information you receive, of anything that is written in textbooks, of anything I tell you or that is written on the course page. Think, try to understand why it is written, why you are advised to do so, and not otherwise. In textbooks, in what other people tell you, and even more so in my materials and advice, there can easily be mistakes, typos, and finally, you may find easier ways to achieve the same — so never take for granted what you read somewhere, always think about and reflect on the information received. It may turn out that in one source you read one information, and in another source something absolutely opposite — think, experiment (see below), and understand how to do better.</p>
         
-        <p>Also, don't be afraid to experiment! If you are not sure if something is possible in python/c++/etc., if it ok to write this or that command, whether it will work as you expect — try it: write and check. If you don't remember exactly how to write a command, try several options until you succeed. If you have read completely different information about how to do something in different places, try it and check which method works! Don't be afraid to try, don't be afraid to experiment — this way you will learn a lot more than if you just strictly follow what is written in any textbooks or what  someone (even me) told you.</p></div>""")
+        <p>Also, don't be afraid to experiment! If you are not sure if something is possible in python/c++/etc., if it ok to write this or that command, whether it will work as you expect — try it: write and check. If you don't remember exactly how to write a command, try several options until you succeed. If you have read completely different information about how to do something in different places, try it and check which method works! Don't be afraid to try, don't be afraid to experiment — this way you will learn a lot more than if you just strictly follow what is written in any textbooks or what someone (even me) told you.</p></div>""")
 
 module20927_35 = () ->
     page(
         "\nAbout the license for the site materials", 
                                                 String.raw"""<div class="box generalbox generalboxcontent boxaligncenter clearfix"><h2>About the license for the materials of this site</h2>
         <h3>The source code of the site</h3>
-        The source code of the actual site algoprog.ru written by me (Peter Kalinin) and distributed under the <a href="https://www.gnu.org/licenses/agpl">GNU Affero General Public License</a>. You can download the source code from the website <a href="https://github.com/petr-kalinin/algoprog">github.com/petr-kalinin/algoprog</a> .
+        The source code of the actual site algoprog.org written by me (Petr Kalinin) and is distributed under the <a href="https://www.gnu.org/licenses/agpl">GNU Affero General Public License</a>. You can download the source code from the website <a href="https://github.com/petr-kalinin/algoprog">github.com/petr-kalinin/algoprog</a>.
         
         <h3>Theoretical materials</h3>
         <p>There are various theoretical materials on this site with varying degrees of clarity from the point of view of the license.</p>
         <p>Materials in which the license is explicitly specified are distributed under the license specified in them.</p>
-        <p>Materials posted on other sites to which from the site algoprog.ru only the link is affixed, distributed under a license determined by the specified site.</p>
-        <p>Materials in which the license is not explicitly specified, but of which I am the author (this is most of the materials posted directly on the site algoprog.ru ), distributed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike (CC BY-SA) 4.0</a> license.</p>
+        <p>Materials posted on other sites to which from the site algoprog.org only the link is affixed, are distributed under a license determined by the specified site.</p>
+        <p>Materials in which the license is not explicitly specified, but of which I am the author (this is most of the materials posted directly on the site algoprog.org ), are distributed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike (CC BY-SA) 4.0</a> license.</p>
         <p>If you are not sure which license applies to a particular material, ask me.</p>
         
-        <h3>Task conditions</h3>
-        <p>The terms of the tasks are taken from the website <a href="https://informatics.mccme.ru">informatics.mccme.ru</a> , where they are mostly collected from various contests. The terms of the license for them are not clear.</p>
+        <h3>Task statements</h3>
+        <p>Most of the the task statements are taken from the website <a href="https://informatics.mccme.ru">informatics.mccme.ru</a> , where they are mostly collected from various contests. The terms of the license for them are not clear.</p>
         </div>""", {id: "license"})
 
 module20927_15 = () ->
     page(
         "\nAbout the level system", 
                                       String.raw"""<div class="box generalbox generalboxcontent boxaligncenter clearfix"><h1>About the level system</h1>
-        <p>All the material in our course is distributed by levels, from the simplest to the most complex. The levels are numbered in consecutive numbers (1, 2, 3, ...), sublevels numbered with letters are also introduced within the level (in level 1 — sublevels 1A, 1B, 1C and 1D, etc.)</p>
-        
-        <p>Most levels have the following structure: sublevels A and B contain new material, and sublevels C and D (the latter is not always there) — additional tasks of increased complexity to consolidate this material. Sometimes in levels C and D there may be particularly difficult tasks for the material of significantly earlier levels (for example, in level 5C there may be a difficult task for the material of level 3). Sometimes there are contests on separate topics in levels C and D, sometimes additional tasks in these levels go in random order.</p>
+        <p>All the material in our course is grouped into levels, from the simplest to the most complex. The levels are numbered in consecutive numbers (1, 2, 3, ...), sublevels numbered with letters are also introduced within the level (in level 1 — sublevels 1A, 1B, 1C and 1D, etc.)</p>
+        
+        <p>Most levels have the following structure: sublevels A and B contain new material, and sublevels C and D (the latter is not always there) — additional problems of increased complexity to consolidate this material. Sometimes in levels C and D there may be particularly difficult problems for the material of significantly earlier levels (for example, in level 5C there may be a difficult problem for the material of level 3). Sometimes there are contests on separate topics in levels C and D, sometimes additional problems in these levels go in random order.</p>
         
         <p>I assume that you will go through the sublevels sequentially, moving to a new sublevel usually when you have "passed" the previous sublevel. Exception: if you have passed some topic in sublevel A or B, and you see a contest of advanced tasks on the same topic in sublevel C or D, then you can solve it.</p>
         

        <h3>Sending for testing</h3>
        <p>Go back to the page with the problem statement. Below the statement there is a section "Submit a solution" (it is only there if you are registered on the site and logged in). Click the file selection button and select the file with your solution. Make sure you select the file .py or .cpp (with source code), not .pyc, .o or .exe (already compiled program)! Make sure that the correct language is selected in the drop-down list next to it, and click the "Send" button.</p>
        
        <p>Your program is sent to the server, which checks it by running on several test examples. These test cases are unknown to you, but they are always the same in each specific problem (i.e. if you send several times, the test cases will be the same each time). In this case, the testing system will run your program several times, each time it will simulate keyboard input of the values N and K from the next test example, and check that your program outputs the correct answer.</p>

        <p>Under the submission form there is a table listing all your attempts (also called "submissions") for this task. Initially, of course, there is no table there. After you have submitted your solution, it will appear in this table (after a while — about a minute). The "Status" column displays the result of testing your program. Immediately after you have submitted the program, you can see there "Compiling" or "Testing", which means that your task is being tested. The table is updated automatically, wait until the final result of the check appears in the "Status" column.</p>

        <p>The main results of the check that you can see:
        </p><ul>
        <li>OK — your program has passed all the tests correctly, hooray!</li>
        <li>Compilation error — your program has not compiled</li>
        <li>Partial solution — your program didn't pass all the tests (maybe it didn't even pass any). So, your program is not working quite right (or completely wrong), try to find errors.</li>
        <li>There are also "Accepted" and "Ignored" statuses, but they are not set automatically, so about them below.</li>
        </ul>

        <p>You can click on each line in the package table, after which a window with detailed information about the package will open. Firstly, there will be the full code of your program, so you can always check whether you have sent exactly what you wanted; if you solved problems from school, then when you come home, you will be able to see the codes of all your programs, etc.</p>

        <p>Secondly, in the window that opens there is a tab "Protocol", where the test protocol of your program is displayed. If your program has not compiled (the status is "Compilation error"), then there will be a compilation protocol: errors found in the program will be indicated. If your program has compiled, then there will be a test protocol: for each test, information will be provided about whether this test passed (OK) or not. There are only 6 tests in the task "Dividing apples - 1", so there should be 6 rows in the table. If your submission has received the status "OK", then all 6 lines will be OK; otherwise, some tests will have a different status (it is usually clear from the name of the status what this means).</p>

        <p>Thus, you can see which (by numbers) tests you have passed and which have not. But you can't find out which test it is (in our problem, which N and K are exactly there). This is done so that you learn to test your solution yourself and find examples on which it does not work, and do not consider the testing system as a magic box that gives you examples on which your program does not work. Therefore, if your program does not work, then look for examples on which it is wrong. If you can't find them, then write to me, we'll try to figure it out together. As a last resort, I have access to all the test data, so if I can't find an error just by looking at your program's code, I can see what kind of test your program doesn't work on.</p>

        <p>But in general, try to check the task before sending it to the system (and we will learn this separately). Treat failed attempts as a specific failure, and try to make as few failed attempts as possible. In general, at many contests you will have only one opportunity to pass the task, and if it does not pass some tests, then you will no longer have the opportunity to improve!</p>

        <h3>Counting and ignoring decisions, comments on the decision</h3>
        <p>I will review all your decisions: if there is time, all submissions in general, including unsuccessful ones, if I have little time, and there are a lot of submissions, then only submissions with the OK status.</p>

        <p>In successful submissions, I will review your code for the following:
        </p><ul>
        <li>First, I will look to see if there are any errors in the code that the tests of the testing system were able to pass. It happens that there is some completely unexpected error in the code, and the testing system may miss it (although the tests in the testing system are usually well prepared, and as a rule all errors in the code manifest themselves during testing) - I will see if you have such errors.</li>
        <li>I will also look to see if I have any comments on the code, even if they are not errors, but are general wishes. For example, maybe something can be done easier, or something should be done differently, etc.</li>
        </ul>
        <p>If I have any comments or comments on your program, I will write them and you will be able to see them. Firstly, they will appear on the site in the right column in the "Comments" section; secondly, in each submission, in the window opened by the "more details" link, there is a special "comments" tab. Accordingly, as soon as I comment on your package, you will see a comment. Usually I try to view all the submissions during the day, although sometimes there are long delays, up to several days.</p>

        <p>In addition to actually writing a comment, I make a decision on each of your submissions — either I make this decision (albeit with small comments), or I will require you to rewrite this decision taking into account my comments. In the first case, I change the status of the submission to "Accepted" (i.e. you will see exactly "Accepted" instead of "OK" in the table with your submissions), in the second case I change the status to "Ignored". Accordingly, in the first case, just take note of the comments that I wrote (and it happens that I do not write any comments), although you can rewrite the solution if you want. In the second case, be sure to rewrite the decision taking into account these comments.</p>
        <p>(<a href="https://blog.algoprog.ru/why-ignore/">Read more about why I ignore decisions</a>.)</p>

        <p>In the summary table, the "OK" solutions (i.e., which I haven't looked at yet) are displayed with a yellow background, the "Counted" solutions (i.e., which I have accepted) are displayed with a green background, ignored solutions are not taken into account in the total number of tasks you have solved, just the corresponding task in the summary table is displayed with a blue background.</p>

        <p>I will also try to write comments on your unsuccessful submissions — to point out an error or advise where to look for it, etc. Of course, I will not always write them as soon as I see your attempt, and I will not always fully report the error found — after all, it will usually be useful for you to find the error more-less independently, I will try to give you suggestive advice (but, of course, it depends on the error). In general, if you tried to do a task, but it does not pass the tests, then perhaps within a day I will write you a tip in the comments to your submission.</p>

        <p>Sometimes I may not have time to review all your unsuccessful submissions, or I do not write a comment for some other reasons. In that case, if you want to get a comment on any of them, just email me.</p>

        <h3>Good solutions</h3>
        <p>After I accept your solution (I set the status "Accepted"), you have access to "good solutions" for the corresponding task — on the task page, above the form for submitting the solution, a link to "good solutions" appears.</p>

        <p>"Good solutions" are several (up to 5 pieces) solutions that were passed by other students of the course, and which, in my opinion, are written quite well and can be considered an example of solving this problem. Watch them, especially for those tasks where I have accepted with any comments (but in general it is useful to watch "good solutions" and for all accepted tasks in general). Compare the "good solutions" with your solution, perhaps you will see that something can be done easier, or even find other useful ideas.</p>
        
        <p>I try to keep the balance of different languages in the "good solutions" as much as possible (i.e., as a rule, there are solutions in different languages among the "good solutions"). But look at the solutions in your language, and in other languages that you don't even know — as a rule, you can understand the algorithm even in languages that you don't know at all. On the other hand, you can also find some interesting purely linguistic subtleties and techniques for your language in "good solutions".</p>

        <p>In addition, often in "good solutions" I show different approaches to solving the problem, often there are generally different algorithms. If you see that a "good solution" is very different from yours, it is useful to understand how it works in general.</p>

        <p>At the same time, understand that in fact, hundreds of solutions have already been submitted for many tasks on the site, and in fact there are dozens of "good" ones, if not more. You see a maximum of five of them, simply because there is no point in watching dozens of more or less identical solutions. You will see some five of them who were lucky that I marked them as "good", but this "luck" is often determined by chance, well, the principles mentioned above about the diversity of languages and approaches. That is, you don't see five of the best solutions, but five random ones from among the good ones.</p>

        <p>Therefore, do not assume that if your personal decision did not get into the "good" ones, then it is worse than the "good" ones. It can be just as good, or even something better than the "good" ones, it's just unlucky. If you see that the "good" solutions are written as cleanly and clearly as yours, then yours could also be "good". Conversely, if your solution is in the "good", it does not mean that it is much better than all the others :) For the same reason, the authors of "good solutions" are not signed.</p>

        <p>On the other hand, if you have looked at the "good solutions" and think that your solution is noticeably better than all the "good" ones, write to me, maybe I will add your solution to the "good" ones. (Although I usually designate a solution as "good" at the same time as I count it, so if your solution is really noticeably better than other good ones, as a rule, I will make it "good" even before you can see "good solutions" :) .)</p>

        <h3>Summary table</h3>
        <p>All your submissions for our tasks are displayed in summary tables, links to which are in the site menu. Namely, each cell in the main part of this table indicates the statistics of submissions from a particular student for a specific task. If there is a "+" sign in the cell, it means that the task was passed successfully ("OK" or "Accepted"), if "-" — it means that the person tried to pass the task, but did not pass all the tests. The number after the icon (if any) indicates the number of unsuccessful attempts (if any). For example:
        </p><ul>
        <li>An empty cell indicates that the task did not give up at all;</li>
        <li>"+" indicates that the task was completed on the first attempt;</li>
        <li>notation "-" does not happen;</li>
        <li>"+2" means that the task was passed on the third attempt (two unsuccessful attempts and then a successful one);</li>
        <li>"-2" means that there were only two unsuccessful attempts on the task and that's it.</li>
        </ul><p></p>

        <p>The background of the cell indicates the status of the task relative to the verdicts "Read" and "Ignored":
        </p><ul>
        <li>Yellow background — status "OK", i.e. I haven't looked at this task yet;</li>
        <li>Green background — status "Accepted";</li>
        <li>The blue background indicates the status "Ignored", while the ignored attempt itself is considered unsuccessful.</li>
        </ul><p></p>

        <p>The last two columns of the table indicate the total number of solved tasks and the total number of unsuccessful ("penalty") attempts (only those tasks for which the correct program was eventually obtained are taken into account, ignored attempts are not taken into account). The table is sorted by the total number of solved problems, and with an equal number of solved problems — by the number of penalty attempts.</p>

        <p>The table also has the following feature: only schoolchildren who meet two requirements at once appear in it: first, I have to activate their account, and secondly, the student must have at least one attempt to complete the task. Therefore, if you have not tried to take anything yet, do not be surprised that you are not in the table. If you have already tried to take something, but you are not in the table, then write to me - perhaps I forgot to activate you.</p>

        <p>Similarly, problem sets (contests) they appear in the summary table only when at least someone submits some solution for some problem of this contest.</p>

        <h3>Terminology</h3>
        Above I have already introduced some specific terminology that is used in programming contests, just in case I will repeat it here:
        <ul>
        <li>A contest is any set of tasks that is somehow grouped and separated from the rest. Within the contest, the tasks are usually numbered (1, 2, 3, ... or A, B, C, ... etc.) It can be a separate round of the contest, or a set of tasks for some class or on some topic, etc. As part of our classes, we call a "contest" a set of tasks available on each individual link from a page of the appropriate level. For example, "Arithmetic Operations Tasks" is a separate contest.</li>
        <li>A submission (synonyms: attempt, submit) is your separate attempt to submit a task to the testing system; also the program that you passed in this attempt.</li>
        <li>A penalty attempt (usually in the context of a summary rating) is an attempt that did not pass all the tests.</li>
        <li>The test is a separate test case prepared by the authors of the task in order to test your programs on it. Usually, for each task, the author of the task prepares from 5 to 60 tests, and the programs that you submit for verification are checked in turn on all these tests. In order for the attempt to be considered successful, it is necessary that the program passes all the tests, i.e. it gives the correct answer to all the tests. (Other contests may have different rules.)</li>
        </ul></div>""")

module20927_7 = () ->

                    String.raw"""<h3>What is this course?</h3>
        <p>This is a course on algorithmic programming (algorithms, data structures, etc.)</p>
        
        <p>It is primarily designed for schoolchildren and as a preparation for school programming contests (and many materials in the course are written exactly as for schoolchildren), but also everyone can (and do) study: students, university graduates, etc. Classes for Nizhny Novgorod schoolchildren are free, for everyone else — paid.</p>
        
        <h3>What is being taught here?</h3>
        <p>The main topic is algorithmic programming. Starting from the basics of programming, and further into algorithms and data structures.</p>
        
        <h3>What is NOT taught here?</h3>
        <p>We do not deal with "technical" issues:</p>
