ICPC World Finals 2014

My first World Finals ended with two solved problems and a thoroughly humbling result.

This was my first ICPC World Finals, and I was tremendously excited. At the time, it was still called the ACM-ICPC World Finals.

I will skip the path through regional competition here. For us, that road seemed to lead through Grand Rapids, Michigan, every year; the full story belongs in a separate account of the qualifiers.

I do have to say something about the Russian visa, because it was among the most difficult I have encountered. The application required the original invitation issued by the event. First, the organizers had to be authorized to issue such a document at all; then the physical original had to survive international shipping. It looked appropriately formidable: special brownish-yellow paper covered in text I could not read, with a serial number, my name, signatures, and stamps. That document then had to cross an ocean from Russia to the United States. If it had disappeared in transit, I suspect the practical answer would have been to give up. We eventually hired a travel agency to handle the visa and book the tickets. As far as I remember, the visa alone cost each of us more than $300. Fortunately, the university reimbursed it.

Before the contest, I was in China while both teammates were in the United States, so we had almost no team practice. We attempted two online sessions, coding while connected by video call. They were essentially useless. Before I returned to China, our academic schedules had allowed only a handful of practices together; otherwise, everyone trained alone. We were walking into the World Finals with almost no team preparation.

The trip itself began with a request for leave. I never imagined that I would need formal permission to miss time at a university, much less that obtaining it could become this complicated.

I was enrolled in the 2+2 program at the University of Michigan–Shanghai Jiao Tong University Joint Institute. I spent the first two years at SJTU and the next two at Michigan, then returned to Shanghai for a final-semester capstone project. Completing it meant receiving degrees from both universities. Students could choose not to return, in which case they would receive only the Michigan degree. In practice, many people who planned to work in the United States stayed there instead. From that perspective, returning to Shanghai for the second degree seemed less useful than spending the semester on another U.S. internship, which was far more likely to help with recruiting. The result was an unusually low completion rate for the dual-degree path. As far as I remember—and my memory may be off—it was under 80 percent, probably near the bottom at SJTU.

I was now back at SJTU for that final capstone semester. I already had enough credits, so the project was my only course. I had returned largely because I still did not know where I wanted to build my career and thought it prudent to secure both degrees first, even though I would most likely work in the United States. That made me remarkably relaxed about the consequences. If I somehow failed to graduate from SJTU, I could live with it; I would simply have spent a summer in China with friends.

That was the background. Then contest week approached. University students skip class all the time; this is hardly unique to China, and professors at Michigan rarely took attendance either. What surprised me was that, in an environment where quietly missing class was routine, formally asking permission to miss it seemed almost unforgivable.

I had not planned to request leave at all. There were only two class meetings that week, and I could simply have skipped them. Unfortunately, the second capstone presentation fell in the same week and counted for 5 percent of the final grade. I was not concerned about losing those points; passing the course should not have been a problem. But when I spoke to the faculty member leading the capstone supervisors, he told me I could not miss it: failing to attend any presentation meant failing the entire capstone.

I was stunned. How could missing something worth 5 percent automatically mean failing the course? I searched the syllabus, grading documents, and every other piece of course information I could find. None mentioned such a rule. I might have understood it for the final defense, but this was only the second presentation, with two more still to come. I could not understand the decision. With the limited perspective I had then, I could only interpret it as my request having bruised his pride.

There was little I could say beyond explaining that this was an important competition—the World Finals—and asking whether formal university leave would make the absence acceptable. He said he might consider it if the leave were official. So I had no choice but to begin the process.

That meant going to my student advisor. I no longer remember how many signatures were ultimately required—perhaps three—but his approval came first. I explained that I needed leave for the competition. His manner was gentler than the faculty supervisor’s, but the underlying questions were similar: Why did I need to go? Was the capstone not important? Did I truly have to attend? My answer was firm: yes, I had to go. As I said above, I privately placed little value on the SJTU degree if I ended up working in the United States and was prepared to do without it. I did not say that aloud, of course, but it made my outward position very clear. I was going.

Perhaps my advisor was persuaded by that resolve, and perhaps by my earlier record at SJTU: I had ranked second in the institute by GPA and received an academic achievement award, so I had a well-established reputation as a good student. He finally approved the leave and told me to compete well and bring honor to the university.

The awkward part was that I was representing the University of Michigan. SJTU’s programming team was already exceptionally strong; it certainly did not need me, and I doubt I could have made that team anyway. Naturally, I said none of this. I still wonder what my advisor would have thought if he had known I was not competing for SJTU at all.

Eventually I obtained the leave and the necessary senior signatures. I returned to the faculty supervisor, who agreed to deduct the 5 percent without failing me outright.

It had taken an absurd amount of effort. As an introvert, I felt as though this one request had consumed my entire social quota for the year.

At last, with nothing left hanging over me, I could go compete.

I flew alone from Shanghai. My teammates and coach traveled from the United States. As noted earlier, many students chose to remain in America for internships rather than return to SJTU for graduation, and one teammate had done exactly that. His standard U.S. technology-company summer internship lasted twelve weeks—exactly twelve weeks—and he needed to miss an entire one of them. That could not have been easy either. His account also included some version of “I absolutely have to take this week.” Somehow he cleared every obstacle and secured the time off, despite the risk that it might hurt his chances of a return offer.

My flight connected in Moscow, as flights to many parts of Russia seemed to do. The transfer was smooth until immigration. The officer asked where I was going. I said, “Yekaterinburg.” He replied, “Екатеринбург?” I repeated, “Yekaterinburg.” He repeated, “Екатеринбург?” And around we went.

That is almost a transcript of what happened. I was speaking English, and he mostly was too, except that he pronounced the city in Russian. The Russian and English pronunciations differ substantially, especially in where the stress falls, and I had no idea what he was saying.

Eventually he seemed to understand me and let me through.

I reached Yekaterinburg, arrived at the hotel, and met my teammates. Then all three of us realized the same thing: nobody had brought a plug adapter.

It was not our first time abroad—we had all obviously been to the United States—but that had been different because we lived there long enough that buying adapters was unavoidable. This was probably the first trip for all three of us to a country where an adapter was genuinely necessary, and not one of us had thought to pack one.

We appointed a representative to ask the front desk whether we could borrow one. That representative was me. My English was not very good then. After I tried socket, power, and charger, the receptionist smiled and said, “I think what you want is an adapter.” To be honest, I did not know the word, but it sounded convincingly like the object I needed.

I obtained one adapter. For the rest of the week, all three team members gathered in one room every day and took turns charging our devices.

I barely remember what we did during those days. I think our coach took us to a few sights around the city, but I cannot recall what any of them were. Nobody on the team spoke Russian. Our assistant coach, as I remember it, may originally have been Russian but had moved to the United States for reasons he did not really spell out. According to him, if he entered Russia again, he might have great difficulty leaving. He phrased it carefully, and that was only how I understood it. Had he been with us, perhaps we would have seen more of the city.

Then contest day finally arrived. The problem set was catastrophically difficult. A rumor circulated that the Judges—the people who selected and prepared the problems—had deliberately made it brutal because they feared tourist might finish early by solving the entire set before the five hours were over. Gennady Korotkevich, known by the handle tourist, was widely regarded as the strongest competitive programmer in the world at the time. His team had come very close to finishing the previous year’s set. According to the official post-contest analysis, three extreme test cases had been added to the hardest problem shortly before the contest; without them, his team would have solved the entire 2013 problem set.

Whatever the origin of the rumor, and whatever caused the difficulty, the 2014 set was a disaster. Years later, after I became a World Finals Judge myself and learned how problems were selected, I found that year even harder to explain. I asked a number of people who had been involved, and their answers were variations of, “Was there something unusual about that year? I don’t remember.” The rumor was probably nonsense. To the Judges, it appears to have been an ordinary World Finals whose difficulty simply went badly off course.

Back to the contest.

The first solve on Problem K came at 17 minutes. By the 15-minute mark, we already knew something was wrong. In a normal year, the first solve would almost certainly have appeared around ten minutes; this time the entire scoreboard was still silent. Things did not improve after K was solved. Usually, once the first problem falls, every team turns to it and dozens have accepted it within an hour. Here, almost nobody followed. We read K, had no idea how to solve it, and fell quiet ourselves. We could tell it was a data-structure problem but could not see how to use one. We submitted a few improvised optimizations, accumulated eight wrong attempts, and never solved it. The solution required a range minimum query structure. At the time, we were nowhere near good enough: all three of us had heard of RMQ, but none had mastered even that basic technique well enough to recognize it.

The deadlock lasted until minute 28, when someone solved D. We reread it and decided it might be manageable. Earlier we had not been sure; it was not an obvious easy problem. But if another team had solved it, then it had to be possible. One teammate took it on, and roughly an hour later we accepted D, our first solve of the contest.

Problem C received its first solve at minute 35. It was computational geometry: clearly solvable at first glance, but full of cases and difficult to get accepted. All three of us were weak at geometry, and whenever one appeared, I was usually the person sent in to improvise. As expected, C had case after case. We made six submissions and never solved it. During the contest, we thought we were close. Afterward, we downloaded our code and the official data and discovered that we were nowhere near the correct solution. The computation used real numbers but required integer output, demanding careful treatment of precision. When a result lay arbitrarily close to an integer, different cases required rounding up, rounding down, or taking the nearest value. Three computational-geometry novices were not equipped for that distinction. We had no realistic chance of getting C accepted.

At minute 68, someone solved I. We read it and could not solve it either—but this time our reaction was different. We looked at the team with the first solve and thought, Wait, that team solved I? Then surely there had to be some way to hack it. We still could not devise a clever heuristic, so we used the bluntest possible approach: brute-force search with deliberate time management. The program searched until it was close to the time limit, stopped, and printed the best answer it had found, whatever that happened to be. It worked. As a precaution, we randomized the input order first in case the data had been designed to punish a fixed ordering. Our first four submissions failed because the stopping threshold was wrong and the program exited too early. After tuning the parameters, our fifth submission was accepted. The team with the first solve on I did indeed finish the contest with only that one problem. That has to be one of the strangest one-problem performances in World Finals history.

The other solved problems had little to do with us. We would read one, realize we had no idea how to solve it, and quietly move on.

We recognized B as a knapsack dynamic program requiring the multiple-knapsack optimization, but nobody remembered how that optimization worked. In fact, the problem required taking the underlying idea and deriving an additional optimized formula. We were plainly not capable of doing that on site.

E was the most painful missed opportunity. We read it and found no direction at all. In reality, its entire logic matched DFA minimization, which one teammate and I had studied together only a year and a half earlier. Somehow neither of us remembered it. The problem should have been a gift, but in the contest we never saw the connection.

We also attempted A. Nobody solved it during the contest, including the unofficial teams. We tried largely because we could not do much else. It was a constructive, ad hoc problem rather than an algorithmic one, so one teammate spent three hours thinking about it from the middle of the contest onward. He submitted twice without success. Afterward, our coach asked whether those submissions had been serious. They had. A was in fact solvable, but the empty column on the scoreboard had frightened every team away. Someone later asked the Judges, who had apparently regarded it as the easiest problem in the set—something they expected to be the first solve and then widely accepted. That mismatch was remarkable. For the four cases of n mod 4, the true optimum was n in every case. My teammate had successfully derived n for three of them; for the last, he could only reach n+1. We had come painfully close to what might have been the first—and perhaps only—official solve of A.

We finished the contest with two problems solved.

The frustration afterward was palpable. A World Finals set this difficult felt almost unheard of, which helped the rumor about stopping tourist from finishing early spread quickly. An unofficial tourist team solved seven problems with a lower penalty time and would have placed first, but unofficial teams did not count in the standings. They nearly reached eight or more. One member spent an hour on A and still did not solve it, further evidence that it was not remotely trivial. J was ingenious: its broad direction was visible, but the derivation was punishing and the implementation enormous. Petr later described a moment in which the coding was finished, only for the team to realize they had forgotten the requirement for the lexicographically smallest answer—and abandon the attempt.

The Resolver then produced a dramatic reversal. At the scoreboard freeze, Moscow State University led with six solved problems while second place had only four. Given the difficulty, the championship looked all but certain. Instead, St. Petersburg State University solved three problems in the final hour, also finishing with seven and winning by 39 penalty minutes. Their last accepted submission came after eight wrong attempts, with only two minutes left in the contest. It could hardly have been closer.

Those stories aside, all three of us were deeply disappointed. We agreed on one thing: we would return the following year.

ICPC World Finals 2015

At my second World Finals, we solved every easy problem and left with a few regrets.

After our dismal performance the previous year, we decided to prepare properly this time.

The division of labor among the three of us was now quite clear. I handled implementation-heavy problems and the more exotic algorithms, so over the year I learned a great many techniques I had never even heard of before—half-plane intersection and the Aho–Corasick automaton, for example. Their names sounded suitably elaborate, but they were also genuinely useful. My own training method was to work through problems from previous regional contests, which covered most of the standard algorithms reasonably well.

The other teammate who wrote code handled mathematics, dynamic programming, greedy algorithms, and anything else with even a hint of math. He trained by competing on Codeforces and Topcoder. Their problems differed substantially from the ICPC style: almost every problem involved mathematics to some degree, and the shorter contest format limited how much code a solution could require. That made them well suited to learning this side of competitive programming.

Our third teammate, who did not code at all, was responsible for knowing all the strange things. Our expectation was simple: he did not need to implement them, but he needed broad exposure to everything. His training method was to open an online judge and read the problems in order. If he could not solve one, he read the editorial. Whenever he encountered an unusual technique, he remembered it and told us if it seemed like something the rest of the team ought to know.

Beyond individual practice, we trained together vastly more than the year before. To prepare for the contest, all three of us took the minimum course load in our final semester—and easy courses at that—so we could devote more time to training. My mathematics teammate and I were first-year graduate students; our problem-reading teammate was a senior. We began at roughly one team contest per week, increased to two near the end of the semester, and practiced every day once vacation began. A contest alone lasted five hours. Add the time needed afterward to finish every problem we believed we should have solved, and the entire day was gone, sometimes with work still left.

As the training accumulated, so did our confidence. We ran five-hour virtual contests on Codeforces and noticed that many teams heading to that year’s World Finals were practicing the same sets, though virtual participation meant we did not start at the same time. We encountered teams from Tsinghua, Peking University, Shanghai Jiao Tong, and several European universities. The more contests everyone played, the more often even excellent teams had an off day. In other words, we eventually managed to beat nearly every strong team we could find at least once. Our conclusion was irresistible: if our luck and form were good enough, was there any team we simply could not beat? After some thought, only tourist’s team came to mind. Our goal for the year was a medal.

The contest eventually demonstrated that “if our luck and form were good enough” was a rather demanding condition. On the day, our performance was merely normal, perhaps slightly below normal.

There was a more serious problem. Most of the virtual contests we practiced on Codeforces came from Russian training camps. Russia had exceptionally strong teams—ITMO University in St. Petersburg, tourist’s school, had already dominated the championship for years—but those camp problems differed markedly from the World Finals. Their style was closer to Codeforces itself: heavy on mathematics and light on implementation. Put simply, those contests may have trained my teammate very well while doing almost nothing for my own ability to implement pure coding problems. Unfortunately, I did not recognize this until our post-contest review.

That year the three contestants, our coach, and the assistant coach who had been unable to travel to Russia the year before all flew to Morocco together. I remember almost nothing about the organized sightseeing in the days before the contest. My mind was probably occupied entirely by the competition.

What I do remember is the heat. Going outside felt unbearable; all I wanted was to stay in an air-conditioned room. A friendly man on the street noticed how hot I was and began talking to me about the weather. I understood none of what followed until he pointed into the distance and declared, “the great Sahara!” That part I understood. I assume he was proudly reminding me that the Sahara was nearby.

One incident remains especially vivid. Our assistant coach, who was of Russian background, could be remarkably fearless. In a market in central Marrakesh, we came across a tattoo artist working from a street stall. Do not ask why a tattoo artist had a street stall. It looked unreliable at first glance and not much more convincing at second. Our assistant coach suddenly decided that perhaps he should have a tiger tattooed on his arm. The artist asked him to draw the design, so he sketched what looked like a cartoon cat on his arm.

All three of us had exactly the same thought: if you go through with this, do you still want that arm? In the end, for reasons I do not remember, he did not get the tattoo. Perhaps he eventually decided that the operation looked as dubious as we thought it did.

The market also had vendors selling freshly squeezed orange juice. The press looked extraordinarily wasteful. An orange was cut in half, one hemisphere was placed peel-side down in the machine, and a lever crushed it. The juice came out; the half orange was finished. Even by sight, the yield looked terrible. Still, the juice was excellent. Perhaps the waste was the reason: none of the peel, or even the membrane around the flesh, made it into the drink. There was no bitterness at all, only sweetness.

I had never seen a machine like it. Several years later, on a trip back to China, I encountered the same technique at an airport in a fully automated vending machine. You paid, and it cut three oranges in half and pressed them on the spot. The machine was evidently not very precise. It jammed midway through, stole one of my oranges, and left me with a cup only two-thirds full. There was, naturally, nobody to whom I could appeal. A few years after that, I never saw those machines again. Perhaps the ingredients were too expensive, the machines too unreliable, and the complaints too numerous for the business to survive.

Back to the contest. The three of us discussed running one final practice round on site, then abandoned the idea. It sounded unnecessarily painful, and we could not see what last-minute cramming would accomplish.

On contest day, we entered the hall and found balloons in thirteen colors. That meant thirteen problems, an unprecedented number. By all logic, one of them ought to be exceptionally easy—a free point. That was exactly what happened.

Someone solved A five minutes after the start. It was indeed the giveaway. We followed and accepted it at minute 11.

Then we looked for the next problem. B was geometry and appeared hopeless, so we discarded it immediately. F and M were implementation problems that did not seem conceptually difficult but would take time. D looked at first glance like a mathematical problem involving calculus. Our problem reader identified C as a straightforward network-flow problem. I checked it, agreed, and began coding.

At minutes 28, 29, and 30, teams solved F, C, and D in succession. That reinforced our belief that C was simple network flow. I finished the implementation at minute 35, submitted it, and received a wrong answer. Awkward. I read the code twice, found nothing, and we were stuck.

We asked our problem-reading teammate to debug C while I began implementing F and our mathematics teammate derived the formula for D. At around the one-hour mark, the debugger found a missing case in C. We added it, revised the code, and accepted the problem at minute 63.

I probably spent more than half an hour coding F, then another twenty minutes debugging it against the sample. My implementation skills were simply not good enough. I submitted at minute 93 and got a wrong answer. We printed the code and continued debugging offline.

Our mathematics teammate began coding D. He had written very little geometry before, so I warned him to use a sufficiently long constant for pi—I had been burned by that before—and to use long double, not double, anywhere performance did not matter. During that time I found the problem in F, took the computer briefly to fix it, and accepted F at minute 102.

D was accepted on the first attempt at minute 112.

We now had four problems. When we looked up at the scoreboard, the contest had transformed. L, J, and I had received first solves at minutes 39, 47, and 53; E and H followed at 115 and 118. Nine problems had now been solved by someone, while the leader—I remember it as the University of Tokyo—already had seven. Seven problems in two hours was unprecedented. According to an analysis we had previously heard from a Carnegie Mellon coach, when nine problems were solved within two hours, a medal would require ten and gold would require twelve.

Our mathematics teammate started on L while I coded I. I was a simple interval-merging problem: given several groups of segments, compute the total length covered by every group. Our first idea was a segment tree, specifically a coordinate-compressed one because the endpoints were real numbers. That seemed implausibly elaborate given how many teams had already solved the problem. Were they all implementing compressed segment trees? Then again, this was the World Finals; perhaps they were. We eventually learned that we had badly overthought it. If we represented every uncovered portion as a segment, the task became finding the length covered by at least one such segment. Subtract that from the full range, and one sort was enough.

Instead, we wrestled with the compressed segment tree. It was not an especially complicated data structure, but we had never implemented one in this form. Our first wrong submission came at minute 126. There were countless boundary cases and comparisons between real values waiting to go wrong, so a very long debugging session began. I consumed more time on I than on any other problem. We submitted roughly once every half hour, accumulated four wrong attempts, and finally accepted it at minute 269. From beginning to acceptance, I had probably spent more than three hours on what was supposed to be a simple problem.

While I debugged I on paper, our mathematics teammate implemented L. It was not particularly complicated, and he accepted it on the first try at minute 173.

Then there was J, the strangest problem of the contest. It looked mathematical. After reading it, our mathematics teammate asked whether either of us knew an algorithm for multiplying two very large integers quickly. We did not. The answer was the fast Fourier transform, FFT. None of our practice contests had included an FFT problem, so none of us knew it. Our teammate had identified exactly what was needed, lacking only an FFT implementation. What could we do? Submit a lookup table.

The input contained only one integer, which made the problem ideal for hardcoding precomputed checkpoints into the source. We estimated the size and realized that the table might actually fit. The required file size depended on the sampling interval. If we stored one value for every hundred numbers, we would submit a program of roughly 100 KB, but a query falling between stored values would require computing as many as one hundred additional cases at runtime. Storing every fiftieth value would produce a 200 KB program but halve that work. We did not know the maximum permitted source-file size, so we decided to stop worrying and try it.

That began our long battle with the table. It should not have been so difficult, except that the contest laptop was painfully slow. My teammate tried to save a 100 KB source file and the computer froze, nearly crashing. The cursor spun for a full thirty seconds before the save completed. Every save was terrifying because we expected the machine to die. We had to operate carefully; copying and pasting too much data at once might freeze it again. Saving frequently is normally a good programming habit. Here it became a liability. Whenever my teammate instinctively pressed the shortcut before he was finished, he would immediately swear and ask why his hand had betrayed him again.

The next two hours consisted mostly of me debugging the compressed segment tree while he debugged the enormous table. We took turns at the computer, took turns submitting, and took turns being wrong.

Before the scoreboard freeze, the minimum number of problems in medal position had already risen to eight. We were stuck on two and had no idea how to free ourselves. Since our goal was a medal, we had to open another problem. While the mathematics teammate and I were occupied, our problem reader started E and judged it solvable with a simple greedy algorithm. I quickly implemented that greedy idea and got two wrong answers. He could not tell whether the algorithm or the code was at fault. We were now stuck on three problems. Then the mathematics teammate glanced at it, said the greedy approach was obviously wrong, and produced a counterexample in thirty seconds. E became completely inaccessible, returning us to being stuck on only two.

Our final submission of the hardcoded J solution came four minutes before the contest ended. It was accepted, with considerable difficulty, and that concluded our contest.

The one distinction worth mentioning is that we solved J with a lookup table, and we were the only team in the contest to do so. The official post-contest analysis specifically noted that hardcoding was possible, and that one team in the field had actually used that approach. That team was us.

At the time, I wondered whether the problem setters had never considered hardcoding at all—whether our submission made them realize it was possible, prompting them to add that paragraph to the analysis. Ten years later, after becoming a Judge myself and learning both the people involved and the standards of problem preparation, I consider it overwhelmingly likely that the Judges knew from the beginning that a table would work and deliberately allowed it.

We finished with seven problems. Ignoring penalty time, we were tied for 28th. With penalties included, we placed exactly 50th—the lowest-ranked of all teams that solved seven.

Afterward, we told our coach that we had solved every easy problem and therefore completed the basic assignment. But I and J had consumed so much time that we had none left for anything else. If we had not overthought I, and if we had known FFT for J, each problem could have saved us at least an hour. With that time, M, a pure implementation problem, might have been within reach. Our mathematics teammate would also have had a strong chance on H, a purely mathematical problem.

Reality offers no such revisions, so we were left with a few regrets. Congratulations went to tourist’s ITMO team, which solved the entire set before time expired, won with a perfect score, and became the first—and remains the only—team ever to finish a World Finals early by solving every problem. The hall erupted during the Resolver. Evidently everyone wanted to witness history.

Each contestant may appear at the ICPC World Finals at most twice. With that, my career as an ICPC contestant officially ended.

ICPC World Finals 2017

My first World Finals as a coach.

I was disappointed by the choice of location for that year’s World Finals. I was no longer a contestant, so attending was mostly an opportunity to travel, watch the contest, and enjoy the events. Naturally, I wanted the Finals somewhere worth visiting; Phuket, Thailand, the previous year had been a fine choice. This year, though… everyone who had heard of Rapid City before, please raise a hand. If you had never visited Mount Rushmore yourself, would you have known it was here?

The university paid for the trip, which immediately put me in a good mood. My only regret was that I was doing research on campus that summer and could otherwise have been a teaching assistant for a large course, earning what seemed like serious money to me at the time. After I spoke with the professor, however, he explained that the course had only one TA and could not accommodate someone disappearing for an entire week. So he turned me down. I had to TA a smaller course instead and earned only half as much. Still, there was nothing to deliberate over. Going to the World Finals was obviously more important.

Our team that year consisted of three students I called the “American Brothers” and the “Hong Kong Reporter.” For their path through the regional contest—and the origins of those nicknames—see the eventual collection of regional stories.

For once, I could join the day trip without a contest occupying my thoughts. The organizers took us to Mount Rushmore, the best-known attraction in the area. I went around with the Hong Kong Reporter, whose reporter’s eye proved worthy of the nickname: he immediately spotted tourist, alone. After a moment’s hesitation, he rushed over and asked for a photo, successfully catching his chance. The Hong Kong Reporter had always been a devoted tourist fan, so this was an enormous win. The moment the picture was taken, tourist appeared to activate a video-game escape skill and vanished at speed, plainly unwilling to be caught for another round of photographs. I did not get one. An enormous loss on my part.

All I can offer here instead is the bare rock of Mount Rushmore. Looking at the photograph of myself from that year, it is hard to believe that, despite being so young, I was already that young.

Afterward, we visited the Crazy Horse Memorial. What can I say? It was certainly a sculpture. The story as I heard it was roughly this: after the four presidents had been carved, a Native American chief objected. “We have our own great heroes,” he supposedly said. “We will carve a monument larger than your Mount Rushmore.” The planned sculpture was 172 meters high and 195 meters wide, more than twice the size of the Leshan Giant Buddha; the horse’s head alone would rise over five meters higher than the presidents’ heads. If completed, it would be the world’s largest man-made sculpture. More than sixty years had passed since work began in 1948. The chief and his seven sons had been moving their mountain one piece at a time, yet only Crazy Horse’s face had been carved. As the story went, the people behind the project did not want U.S. government money and hoped to build their national hero’s monument independently, relying entirely on private donations. The funding was therefore limited.

As for the current state of completion… the photograph speaks for itself. The small sculpture in the foreground, outside the shop, shows the intended result. The mountain in the distance shows the actual progress. Was it even ten percent complete?

When contest day arrived, I had no pressure at all, and the contestants did not seem to feel much either. They understood their own level. A ranked finish at the World Finals would be enough; anything but an unranked Honorable Mention.

They ended up with an Honorable Mention after all. The three of them solved three problems by minute 63 and then spent the remaining four hours working without another accepted solution. ITMO, entirely unsurprisingly, won the championship again.

I had no responsibilities at the venue and did not know anyone there, so I wandered around. Eventually I found a small group from Shanghai Jiao Tong University watching the contest and spent a long time sitting behind them, listening to their problem discussions. I had expected five hours to feel long, but they passed remarkably quickly. Sometimes I would stare at the scoreboard even though nothing had changed, with no idea what I expected to see. Then I would look up and two hours had disappeared.

After the contest, the organizers took everyone to a nighttime “light show” projected against the mountain. The quotation marks are deliberate, because my immediate reaction was: you call this a light show? I could gather a hundred people in the hills with laser pointers and produce something similar. It was painfully meager. It was not only my perspective as someone accustomed to China’s fondness for large, extravagant light displays. Even our American coach seemed unable to take much more. He wore an expression that said more than words could, then left early. From the look of him, one might have thought the show had personally embarrassed the United States.