惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
C
Cybersecurity and Infrastructure Security Agency CISA
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Securelist
S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
博客园 - 三生石上(FineUI控件)
T
Threatpost
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
IT之家
IT之家
P
Palo Alto Networks Blog
Microsoft Azure Blog
Microsoft Azure Blog
Spread Privacy
Spread Privacy
Cyberwarzone
Cyberwarzone
腾讯CDC
L
LangChain Blog
Know Your Adversary
Know Your Adversary
C
CXSECURITY Database RSS Feed - CXSecurity.com
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
T
Tor Project blog
AWS News Blog
AWS News Blog
T
Tenable Blog
NISL@THU
NISL@THU
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
MyScale Blog
MyScale Blog
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
美团技术团队
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Eight kids, eight chairs, one rule: explaining FIFA's best-thirds draw to my 8-year-old
Rahul Devaskar · 2026-06-28 · via DEV Community

The question

My son was on the sofa with his iPad, poking at the live "Predict the Bracket" game — the whole 2026 World Cup knockout tree on one screen, every slot already filled with the crowd's favourite for that match. Tap a match, see who most people think goes through, watch the picks flow all the way up to a predicted champion.

He frowned at it. "Daddy, how do they know which team plays which team? The teams aren't even decided yet."

He'd caught something real. The little cards sitting in those slots were only predictions — the crowd's best hunch — but the shape underneath them, who-plays-who and where, was already locked in. Months before a single match kicks off.

Fair question. The 2026 World Cup has 48 teams in 12 groups (A through L). The top two of every group go through — that's 24 teams. Then, to round it up to a nice bracket of 32, they also take the 8 best third-placed teams. Twelve groups, but only eight of their third-place teams get a golden ticket.

"So you don't know which eight until the very end," he said. "But the bracket's already sitting right there on the screen."

"Right."

"That's cheating."

It isn't cheating. It's one of the prettiest little bits of planning in all of sport, and by the end of the afternoon he understood it better than most adults do. We did it with the dining chairs.

The setup, first

Before the chairs, my son needed to know where these kids even come from. So we did the boring-but-important part first.

A football group is a handful of teams who all play each other. When it's done, the best go forward, the worst go home, and — this is the bit that matters — there's a kid right on the line: the best of the rest, neither safely through nor clearly out. That borderline kid is the star of this whole story. Call them a wandering kid.

To learn the trick, let's make the groups nice and small: two groups, A and B, three kids in each — six kids total. In each group the top kid goes straight through to the next round, the bottom kid is out, and the kid in the middle is our wandering kid. So two groups give us two winners through, two kids out, and two wandering kids — second place in Group A, second place in Group B.

(In the real World Cup the groups are bigger — four teams, with the top two safely through — so it's the third-place kids who do the wandering. Exact same puzzle, just more of everything. We'll scale up the moment the rule clicks.)

Two chairs

I lined up two chairs and labelled them with sticky notes: Chair A and Chair B.

"Here's the next round. The winner of Group A is waiting in Chair A's match, the winner of Group B in Chair B's. Our two wandering kids each grab a chair and become someone's opponent. Four kids in the round, two matches, two chairs — and it fits perfectly: every kid is either a waiting winner or a wandering kid, nothing left over."

That clean fit is the whole reason we kept the groups small. (Make them bigger and you also get runners-up, who pair off in their own matches — more bodies, but they never sit in a wandering kid's chair, so they don't change this puzzle one bit.)

Then the only rule:

You can't sit in the chair with your own group's name on it.

Why? Because a wandering kid and their own group's winner already played each other in the group stage. Making them replay immediately would be unfair. So the kid from Group A is banned from Chair A.

He worked it out instantly. Kid A can't sit in A, so kid A goes to B. Kid B goes to A. Done.

"There's only one way."

Cartoon illustration of two wooden chairs labelled A and B, each with a boy in an A or B shirt taking a seat.

Two kids, two chairs — and exactly one fair way to seat them.

"Yep. Easy. Now watch it get sneaky."

The trap: a kid who isn't even from these groups

I kept the two chairs, A and B. But this time the two wandering kids were from team A and from team C (yes, there's a Group C in the mix now).

Notice: there's no Chair C. The kid from C has no banned chair — they can sit anywhere. I call them a free kid.

My son, being eight and therefore greedy, grabbed the free kid first and plonked them in Chair B.

"Done!"

"Is it though?"

Now the only kid left is from team A. The only chair left is Chair A. And kid A is banned from Chair A.

He stared at it. "...he's got nowhere to sit."

Cartoon illustration: a puzzled boy from Group A can't take the chair marked with a crossed-out A, while another boy has already taken the only other chair, B.

Seat the kids in the wrong order and someone can end up with nowhere to sit.

"You stranded him. The free kid could sit anywhere, so the free kid should have taken the chair nobody else could use — Chair A — and left Chair B for kid A."

This is the whole puzzle in miniature. There is always a way to seat everyone, but a careless grab can paint you into a corner. The order you make decisions matters. You have to think about the kid who has the fewest choices, not the one in front of you.

He re-seated them. Free kid in A, kid A in B. Everyone happy. He looked very pleased with himself.

"Okay," I said. "Now let's make it bigger — one step at a time."

Scaling up: three groups

The two-group game taught the rule. But the real tournament has a twist our tiny version skipped: it has to pick which wandering kids get a chair at all. So let's add exactly that — and nothing else yet.

Bump it up to three groups, four kids each — twelve kids. And now we'll do it the grown-up way: the top two from each group go straight through, just like the real World Cup. That's six safe qualifiers. The third-place kid from each group is left in limbo — three wandering kids.

But a knockout bracket likes tidy numbers: 2, 4, 8, 16. Six safe kids aren't a tidy number, and the next one up is eight. Six plus two makes eight — so there's only room for two wandering kids, and we've got three. Someone misses out.

That's the brand-new question, the one the two-group game never had to ask: which two of the three wandering kids get in? The two with the best records. And there are only three ways that can shake out — leave out the kid from A, or from B, or from C:

3 wandering kids, choose 2  →  3 possible line-ups

Pick the best two and it all lands clean: six safe + two chosen = eight kids, four matches. Two of the group winners get a wandering kid dropped in beside them (same rule — never your own group); the other four pair off among themselves.

Three ways. Hold onto that number — it's about to get a lot bigger.

Finally: the FIFA level

Now the real draw. Twelve groups, four kids each — forty-eight teams. Top two from every group march straight through: twenty-four safe qualifiers. The next tidy bracket size above twenty-four is thirty-two — so we need eight more kids, chosen from the twelve third-place teams. (Exact same move as the three-group game: 24 + 8 = 32, just like 6 + 2 = 8.)

In the real bracket, exactly eight of the twelve group winners are the ones waiting for a wandering third-place team: the winners of groups A, B, D, E, G, I, K, and L. The other four — C, F, H, J — get a runner-up instead.

My son pounced on that straight away: "Why are some groups treated differently?" Two reasons, and they're both fair.

It's a reward — and there aren't enough to go round. Winning your group is the prize, and part of the prize is an easier-looking opponent. A third-place team is the weakest kind of team that qualifies, so the bracket feeds those gentler match-ups to the group winners — a little thank-you for finishing first. (That's exactly why a wandering kid always plays a group winner, and never a runner-up.) But there are only eight wandering kids and twelve winners, so four winners are always going to miss the reward and draw a runner-up — a tougher opponent — instead.

Which four miss out? Whatever keeps the bracket balanced. FIFA sprinkles the eight wandering kids evenly across the bracket on purpose, so they don't all bunch into one corner and turn one route to the final into an easy stroll. Once those eight seats are pinned down for fairness, C, F, H and J are simply the winners left over — the ones whose spot in the tree happens to line them up against a runner-up. Nothing personal; just where the chairs landed.

"But that's not fair!"

He was instantly outraged on behalf of C, F, H and J. "Why should four winners get a tougher opponent? They won their group too!"

Good. Be cross about it. Here's why it's fairer than it looks.

Someone has to. Eight wandering kids, twelve winners — some four winners end up with a runner-up no matter how you arrange the bracket. It isn't a punishment aimed at anyone; it's just what's left over once the easy tickets run out.

It's decided with the lights off. When FIFA fixes which winners get a runner-up, the groups are still empty — nobody knows whether Group C will be won by a giant or by the tournament's surprise package. No real team is being picked on, because no real teams exist yet. By the time you find out who actually won Group C, the rule was already set in stone, blind. That's the fairest kind of unfair: agreed in advance, before anyone knows whom it lands on.

And winning still buys the big prize. The real reward for topping your group was never the third-placed team — it's that a group winner never has to play another group winner in this round. Even the four "unlucky" winners only face a runner-up: a team that finished second, below them. They're still the favourite — they just got the second-best easy draw instead of the very best one.

And honestly, "tougher on paper" isn't always tougher in real life. Think of Minecraft. A zombie sounds like a proper monster — but it's slow, it groans, and you watch it lumber toward you from a mile off. Easy. A creeper? Just a quiet green blob, minding its own business… right up until it blows your whole base sky-high. A runner-up can be the zombie: ranked higher, totally beatable. A third-placed team can be the creeper: looks harmless on the bracket, secretly ends your tournament.

My son chewed on that. "So it's only a little bit unfair." Exactly. A knockout bracket can never be perfectly equal — somebody's road to the final is always a touch bumpier than someone else's. The whole job is to keep that bump small, spread it around, and lock it in before anyone can argue about who it lands on.

Back to the chairs

Anyway — back to the puzzle. Eight chairs, labelled A, B, D, E, G, I, K, L. And eight kids — the eight best third-place teams. But here's the catch we knew was coming: you don't know which eight groups they'll come from. Maybe C, F, G, H, I, J, K, L. Maybe A, B, C, D, E, F, G, H. Any eight of the twelve.

Same single rule as the very first chairs game: no kid sits in the chair with their own group's letter. A third from Group K can never be sent to Chair K.

"That's just the chairs game but bigger," he said.

"Exactly. So how many different groups of eight could show up?"

Why 495

Back in the three-group game, "choose two of three" gave us three line-ups. The real draw asks the very same question, just bigger: choose eight of twelve. Still nothing but counting.

How many ways can you choose eight things out of twelve?

I explained "choosing" the way it clicks for a kid: choosing 8 to keep is exactly the same as choosing 4 to leave out. And picking which 4 groups miss out is easier to picture. It comes out to:

12 × 11 × 10 × 9
─────────────────  =  495
 4 × 3 × 2 × 1

(Mathematicians write this "12 choose 8" — but "how many ways to pick the 4 unlucky groups" is the same number, 495, and far easier to feel.)

He looked at the little sum, then up at me. "I don't get it."

And that's completely fine — I didn't either, at his age. "This one's got a big fancy name," I told him. "Permutations and combinations. I found it hard at school too, honestly. It doesn't really click until Year 10 or 11 — that's years and years away. You don't need it today."

"So how do I know it's right?"

"Take my word for it: the maths checks out. 495, exactly. And the formula isn't even the interesting bit — what FIFA does with that 495 is."

That was about the limit of his patience. He slid off the chair, said "okay, Daddy," and wandered off to build a Lego stadium on the rug — happy, I think, that the chart wasn't cheating after all.

Which is the perfect moment: the eight-year-old leaves, and the grown-ups lean in. Because what FIFA does with that 495 is the real magic — and it's exactly the part he'd have found boring. So, just us from here.

There are 495 different possible lineups of which groups' thirds qualify. Not "495 matches" — 495 different situations the tournament might find itself in. And for every single one of those, someone has to seat the eight kids in the eight chairs — by the rule, before the tournament even starts.

The bit nobody expects: there are thousands of correct answers

Here's where I thought the puzzle would be "find the one valid seating." It is not.

Take any one of those 495 lineups and count how many legal seatings exist — every way to put the eight kids in the eight chairs with nobody in their own-letter chair. I expected a handful. I wrote a tiny program to count them.

The answer, depending on the lineup, is somewhere between 14,833 and 24,024.

Not 14. Fourteen thousand.

The "don't sit in your own chair" rule sounds strict, but with eight chairs it barely narrows things down at all. Every single one of those 495 lineups has tens of thousands of perfectly fair seatings.

Which raises the real problem — and it's not the one I expected:

The hard part isn't finding a fair seating. It's getting the whole planet to agree on the same fair seating, in advance, with no arguments.

Think about everything that's already printed before a ball is kicked: TV schedules, which city hosts which match, ticket stubs, the path each team would take to the final. You cannot have a referee deciding on the night which of 14,000 fair brackets to use. Imagine the conspiracy theories.

So FIFA does the only sane thing. For each of the 495 possible lineups, they pick one seating ahead of time, write it down, and publish it. That document is real, and it has a wonderfully boring name.

Annexe C: the answer key

It's called Annexe C, and it's in the official tournament regulations. It is, quite literally, a table with 495 rows — one for every possible lineup — and you just look yours up.

I pulled the actual PDF and decoded it for the predictor I built (more on that below). The columns are the eight waiting winners:

Option | 1A | 1B | 1D | 1E | 1G | 1I | 1K | 1L

1A means "the match where the winner of Group A is waiting." Each row tells you which third-place team gets sent there. Here's the real Option 1 — the lineup where the thirds happen to come from groups E, F, G, H, I, J, K and L:

Winner waiting 1A 1B 1D 1E 1G 1I 1K 1L
Third sent there 3E 3J 3I 3F 3H 3G 3L 3K

Read it like a kid reads it: the winner of Group A will play the third-place team from Group E. Winner of B plays third of J. And so on. Check the rule — no column ever sends a team into its own letter. 1A never gets 3A; 1G gets 3H, not 3G. Every row of all 495 obeys it. (I checked all of them by machine. Zero violations. It's a beautiful piece of work.)

That's the entire trick my son thought was cheating:

  1. The bracket shape is fixed forever. Eight chairs, in known places.
  2. Only the names are unknown.
  3. There are 495 possible name-situations.
  4. Each one has thousands of fair answers, so FIFA pre-commits to exactly one and publishes the answer key.
  5. On the night the groups finish, you don't compute anything. You read one row out of a book everyone already agreed on.

Where I came in: the developer footnote

I didn't go down this rabbit hole for fun. I build Quizzy, and one of its toys lets you predict the whole World Cup bracket before it happens. To grade your predictions, my code has to do exactly what FIFA does: take your eight predicted third-place teams and seat them in the eight chairs, correctly.

The lazy instinct is "write an algorithm that finds a valid seating." But Annexe C taught me the lesson the chairs taught my son: there are thousands of valid seatings, and my answer has to match FIFA's exact one, or a user's bracket would diverge from reality. So I don't compute it. I ship the real 495-row table and look it up — the same answer key, byte for byte.

There's one genuinely tricky wrinkle, and it's the same trap as the free kid. While someone is still filling in their bracket, they might have picked only three or four thirds, not all eight. The lookup table only knows about complete sets of eight. So for a half-finished bracket I can't use the book at all — I fall back to live, careful seating (the computer-science name is bipartite matching, but really it's just "seat the kid with the fewest choices first, and back up if you get stuck"). The moment all eight are chosen, I switch back to FIFA's official answer key.

Two different tools for two different moments. The chairs game predicted both.

The end of the afternoon

My son missed all of this — the 14,000 fair brackets, the answer key, every bit of it. He'd taken the one answer he came for (the chart isn't cheating) and gone back to the Lego.

And that's the right instinct, really. The stuff he tapped out of — the formula, the 495, the table — is just the packaging. The lovely thing is the idea inside it: that you can take something genuinely unknowable — which eight of the twelve teams will scrape through in third, out of all the ways a 48-team tournament could possibly unfold — and tame it completely, in advance, with nothing but a printed list and one stubborn rule. No team ever plays its own group. Everything else falls out of that single line.

Then he reappeared at my elbow, half-built Lego stadium in hand, with one more question — and of course it was the only one that actually matters.

"Daddy… so who's going to win?"

That's the beautiful catch. Annexe C has 495 rows and a fixed, fair answer for every possible way the groups can fall; months ahead of time, it can tell you exactly who plays whom. It cannot tell you the one thing my son — and the rest of the planet — actually want to know. That part, thank goodness, you still have to play.


If you want to test your own bracket against the real Annexe C — half-finished or complete — that's exactly what the Quizzy World Cup predictor does. The dining chairs are optional.