Gemini-powered algorithm problem solver agent.
ä˝żç¨ Gemini AI čŞĺ¨č§Łĺł Codeforces ç OJ ĺšłĺ°ççŽćłçŤčľé˘çŽďźćŻćčŞĺ¨ĺŻšćéŞčŻĺ Python 轏 C++ çżťčŻă
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â AICodeforcer â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â â
â âââââââââââââââ âââââââââââââââ âââââââââââââââââ âââââââââââââââ â
â â Standard â â Interactive â â Communication â â Heavy â â
â â Mode â â Mode â â Mode â â Mode â â
â ââââââââŹâââââââ ââââââââŹâââââââ âââââââââŹââââââââ ââââââââŹâââââââ â
â â â â â
â âź âź âź â
â âââââââââââââââ âââââââââââââââ âââââââââââââââââââ â
â â Solver â â Preprocessorâ â Preprocessor â â
â â Agent â â Agent â â Agent â â
â ââââââââŹâââââââ ââââââââŹâââââââ ââââââââââŹâââââââââ â
â â â â â
â â âź âź â
â â âââââââââââââââ âââââââââââââââââââ â
â â â Solver â â Solver â â
â â â Agent â â Agent â â
â â ââââââââŹâââââââ ââââââââââŹâââââââââ â
â â â â â
â âź âź âź â
â âââââââââââââââ âââââââââââââââ âââââââââââââââââââ â
â â BruteForce â â Stress â â Stress â â
â â Generator â â Test â â Test â â
â â (3-way) â â â â â â
â ââââââââŹâââââââ ââââââââŹâââââââ ââââââââââŹâââââââââ â
â â â â â
â âź âź âź â
â âââââââââââââââ âââââââââââââââ âââââââââââââââââââ â
â â Stress â â C++ â â C++ â â
â â Test â â Translator â â Translator â â
â ââââââââŹâââââââ âââââââââââââââ âââââââââââââââââââ â
â â â
â âź â
â âââââââââââââââ â
â â C++ â â
â â Translator â â
â âââââââââââââââ â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Shared Components â
â âââââââââââââââ âââââââââââââââ âââââââââââââââ âââââââââââââââ â
â â Executor â â API Logger â â Types â â Tools â â
â â (Sandbox) â â â â â â â â
â âââââââââââââââ âââââââââââââââ âââââââââââââââ âââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
ć ĺçŽćłé˘ć¨Ąĺź
- čŞĺ¨ĺćçŽćłé˘çŽĺšśçćč§Łćł
- ä¸čˇŻĺ ąčŻć´ĺçćďź3 个çŹçŤ Agent ĺż éĄťä¸č´ďź
- čŞĺ¨ĺŻšćéŞčŻďźéťčޤ 1000 çťéćşćľčŻďź
- 夹贼čŞĺ¨éčŻćşĺś
-
交äşé˘ć¨Ąĺź
- čŞĺ¨çćčŻćľćşďźJudgeďźĺć°ćŽçćĺ¨
- AI éŞčŻčŻćľćşćŁçĄŽć§
- 交äşĺźĺŻšćéŞčŻďźéťčޤ 100 çťćľčŻďź
-
é莯é˘ć¨Ąĺź
- ćŻć Alice/Bob 两éśćŽľé莯éŽé˘
- čŞĺ¨çćä¸é´äťśďźMiddlewareďźĺéŞčŻĺ¨
- 两éśćŽľä¸˛čĄć§čĄĺŻšćéŞčŻďźéťčޤ 100 çťćľčŻďź
-
Heavy樥ĺźďźĺ¤Agentć˘ç´˘ďź
- ĺ¤ä¸ŞAgentĺšśčĄć˘ç´˘ä¸ĺč§Łćł
- ćľć°´çşżĺšśčĄďźAgent N éŚćŹĄ stress_test ćśč§Śĺ Agent N+1
- LLMć衯ĺťéćŁćľďźé˛ć˘éĺ¤çŽćł
- čŞĺ¨çŚć˘ĺˇ˛ć˘ç´˘çć衯ďźĺźşĺśĺˇŽĺźĺ
- ćŻćé 罎éĺä¸éďźAPPROACH_REWRITE_LIMITďź
-
éç¨ĺč˝
- 使ç¨ć˛çŽąçŻĺ˘ć§čĄäťŁç ćľčŻ
- Python 䝣ç čŞĺ¨çżťčŻä¸şçŤčľéŁć ź C++
- ćŻć交äşĺźĺéŚäźĺďźTLE/WA/MLE/REďź
- ĺŽć´ API 诡ćą/ĺĺşćĽĺżčްĺ˝
# ĺ
é饚çŽ
git clone https://github.com/yourname/AICodeforcer.git
cd AICodeforcer
# ä˝żç¨ uv ĺŽčŁ
äžčľ
uv sync
# ćä˝żç¨ pip
pip install -e .ĺĺťş .env ćäťśĺšśé
罎ďź
# Gemini API é
罎ďźĺż
éďź
GEMINI_API_KEY=your_api_key_here
# ĺŻéé
罎
GEMINI_MODEL=gemini-2.5-flash # 樥ĺĺç§°
GEMINI_BASE_URL=https://your-proxy.com # čŞĺŽäš API ĺ°ĺ
GEMINI_MAX_OUTPUT_TOKENS=65536 # ć大čžĺş token ć°
# API 诡ćąéčŻćŹĄć°
API_REQUEST_MAX_RETRIES=30 # API 诡ćąĺ¤ąč´ĽéčŻćŹĄć°
# 寚ććľčŻćŹĄć°
STRESS_TEST_NUM=1000 # ć ĺ樥ĺźĺŻšć揥ć°
INTERACTIVE_STRESS_TEST_NUM=100 # 交äşć¨ĄĺźĺŻšć揥ć°
COMMUNICATION_STRESS_TEST_NUM=100 # é莯é˘ć¨ĄĺźĺŻšć揥ć°
# éčŻé
罎
BRUTE_FORCE_CONSENSUS_RETRIES=3 # ä¸čˇŻĺ
ąčŻĺ¤ąč´ĽéčŻćŹĄć°
# Heavy樥ĺźé
罎
APPROACH_REWRITE_LIMIT=2 # ć衯éĺä¸éďźĺťéćŁćľďź| é 罎饚 | éťčŽ¤ĺź | 说ć |
|---|---|---|
GEMINI_API_KEY |
- | ĺż é Gemini API ĺŻéĽ |
GEMINI_MODEL |
gemini-2.5-flash |
使ç¨ç樥ĺĺç§° |
GEMINI_BASE_URL |
- | čŞĺŽäš API ĺ°ĺďźäťŁçďź |
GEMINI_MAX_OUTPUT_TOKENS |
65536 |
ĺ揥诡ćąć大čžĺş token |
API_REQUEST_MAX_RETRIES |
30 |
API 诡ćąĺ¤ąč´ĽéčŻćŹĄć° |
STRESS_TEST_NUM |
1000 |
ć ĺ樥ĺźĺŻšććľčŻćŹĄć° |
INTERACTIVE_STRESS_TEST_NUM |
100 |
交äşć¨ĄĺźĺŻšććľčŻćŹĄć° |
COMMUNICATION_STRESS_TEST_NUM |
100 |
é莯é˘ć¨ĄĺźĺŻšććľčŻćŹĄć° |
BRUTE_FORCE_CONSENSUS_RETRIES |
3 |
ä¸čˇŻĺ ąčŻĺ¤ąč´ĽéčŻćŹĄć° |
APPROACH_REWRITE_LIMIT |
2 |
Heavy樥ĺźć衯éĺä¸é |
# čżčĄ
aicodeforcer
# ć
python -m AICodeforcer.mainčżčĄĺéćŠć¨Ąĺźďź
- ć ĺçŽćłé˘ - 寚ćéŞčŻć¨Ąĺź
- 交äşé˘ - 交äşĺźčŻćľć¨Ąĺź
- éčŽŻé˘ - Alice/Bob 两éśćŽľć¨Ąĺź
- Heavyć¨Ąĺź - ĺ¤Agentć˘ç´˘ä¸ĺč§Łćł
çśĺďź
- ç˛č´´ĺŽć´çé˘çŽĺ 厚
- čžĺ
Ľ
ENDçťćčžĺ Ľ - çĺž AI ĺćăçźĺ䝣ç ă寚ćéŞčŻ
- čˇĺž Python + C++ ĺ䝽䝣ç
- ć交ĺčžĺ
ĽĺéŚďźĺŚ
TLE on test 5ďźçť§çťäźĺ - čžĺ
Ľ
ACćquitçťć
src/AICodeforcer/
âââ main.py # CLI ĺ
ĽĺŁ
âââ types.py # çąťĺĺŽäš
âââ api_logger.py # API ćĽĺżčްĺ˝ĺ¨
âââ standard/ # ć ĺçŽćłé˘ć¨Ąĺ
â âââ agents/
â â âââ solver.py # çŽćłćąč§Ł Agent
â â âââ brute_force.py # ä¸čˇŻĺ
ąčŻć´ĺçć
â â âââ cpp_translator.py
â âââ tools/
â âââ executor.py # ć˛çŽąäťŁç ć§čĄĺ¨
â âââ run_python.py # 䝣ç ć§čĄĺˇĽĺ
ˇ
â âââ stress_test.py # 寚ćéŞčŻĺˇĽĺ
ˇ
âââ standard_heavy/ # Heavy樥ĺźć¨Ąĺ
â âââ agents/
â âââ solver.py # Heavyćąč§ŁAgent
â âââ heavy_solver.py # ĺ¤Agentĺč°ĺ¨
â âââ approach_checker.py # ć衯ĺťéćŁćľ
âââ interactive/ # 交äşé˘ć¨Ąĺ
âââ agents/
â âââ solver.py # 交äşé˘ćąč§Ł Agent
â âââ preprocessor.py # čŻćľćşçćĺ¨
â âââ judge_validator.py
âââ tools/
âââ interaction_runner.py # IPC é俥玥ç
âââ interactive_stress_test.py
âââ communication/ # é莯é˘ć¨Ąĺ
âââ agents/
â âââ solver.py # é莯é˘ćąč§Ł Agent
â âââ preprocessor.py # ä¸é´äťś/éŞčŻĺ¨çć
âââ tools/
âââ communication_runner.py # 两éśćŽľć§čĄĺ¨
âââ stress_test.py # é莯é˘ĺŻšć
ćŻćŹĄčżčĄäźĺ¨ logs/ ä¸ĺĺťşćśé´ćłć䝜多ďź
logs/20251224_165001/
âââ solve.log # ćŽéćĽĺż
âââ solve_full.log # ĺŽć´ API ćĽĺż
âââ brute_force_full.log # ć´ĺçććĽĺż
âââ brute_force_agent*_full.log
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Standard Algorithm Solver â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 1. Problem Analysis (é˘ćĺć) â
â ââ Restate problem in own words â
â ââ Identify input/output format â
â ââ Build mathematical model â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 2. Algorithm Design (çŽćłčŽžčŽĄ) â
â ââ Propose 2-3 candidate approaches â
â ââ Analyze time/space complexity â
â ââ Select optimal approach with proof â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 3. Code Implementation (䝣ç ĺŽç°) â
â ââ Write Python solution â
â ââ Use run_python_code tool to test â
â ââ Verify with sample cases â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 4. Brute Force Generation (ć´ĺçć) - 3-Way Consensus â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â âââââââââââ âââââââââââ âââââââââââ â â
â â â Agent 1 â â Agent 2 â â Agent 3 â (Parallel) â â
â â ââââââŹâââââ ââââââŹâââââ ââââââŹâââââ â â
â â â â â â â
â â âź âź âź â â
â â âââââââââââ âââââââââââ âââââââââââ â â
â â â Code 1 â â Code 2 â â Code 3 â â â
â â ââââââŹâââââ ââââââŹâââââ ââââââŹâââââ â â
â â ââââââââââââââââźâââââââââââââââ â â
â â âź â â
â â ââââââââââââââââ â â
â â â Consensus? â â â
â â â (All Same?) â â â
â â ââââââââŹââââââââ â â
â â â â â
â â âââââââââââââ´ââââââââââââ â â
â â âź âź â â
â â [Yes: Pass] [No: Retry] â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 5. Stress Test (寚ćéŞčŻ) - Default 1000 tests â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â for i in range(1000): â â
â â test_data = brute_force.generate_random_input() â â
â â expected = brute_force.solve(test_data) â â
â â actual = optimized.solve(test_data) â â
â â if expected != actual: â â
â â return FAILED with counterexample â â
â â return PASSED â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âââââââââââ´ââââââââââ
âź âź
[PASSED] [FAILED]
â â
âź âź
âââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââ
â 6. C++ Translation â â Analyze counterexample â
â Python â C++ â â Fix and retry â
âââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 7. Feedback Loop (ĺéŚäźĺ) â
â User submits to OJ â Gets feedback (TLE/WA/MLE/RE) â
â â AI analyzes and optimizes â Repeat until AC â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Interactive Problem Solver â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 1: Preprocessing (é˘ĺ¤çéśćŽľ) â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â InteractivePreprocessor Agent â â
â â ââ Analyze interaction protocol â â
â â ââ Generate Judge (čŻćľćş) â â
â â â ââ Reads test data from file â â
â â â ââ Interacts via stdin/stdout â â
â â â ââ Returns: 0=AC, 1=WA, 2=PE â â
â â ââ Generate Data Generator (ć°ćŽçćĺ¨) â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 2: Judge Validation (čŻćľćşéŞčŻ) â
â JudgeValidator Agent verifies judge correctness â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 3: Solution Development (č§Łćłĺźĺ) â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â InteractiveSolver Agent â â
â â ââ Analyze query strategy (Binary Search / Divide & Conquer) â â
â â ââ Estimate query count upper bound â â
â â ââ Write interactive solution with flush=True â â
â â ââ Handle -1 error responses â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 4: Interactive Stress Test (交äşĺŻšć) - Default 100 tests â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â for i in range(100): â â
â â test_data = generator.generate() â â
â â âââââââââââââââ âââââââââââââââ â â
â â â Judge â âââââââş â Solver â (IPC Communication) â â
â â â (stdin) â â (stdout) â â â
â â âââââââââââââââ âââââââââââââââ â â
â â if judge.exit_code != 0: return FAILED â â
â â return PASSED â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 5: C++ Translation + Feedback Loop â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Communication Problem Solver â
â (Alice & Bob Protocol) â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 1: Preprocessing (é˘ĺ¤çéśćŽľ) â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â CommunicationPreprocessor Agent generates: â â
â â ââ Data Generator (ć°ćŽçćĺ¨) â â
â â ââ Middleware (ä¸é´äťś) - transforms Alice output â Bob input â â
â â ââ Verifier (éŞčŻĺ¨) - checks final answer correctness â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 2: Solution Development (č§Łćłĺźĺ) â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â CommunicationSolver Agent writes single file handling both phases â â
â â â â
â â def main(): â â
â â phase = input() # "first" or "second" â â
â â if phase == "first": â â
â â solve_alice() # Process original input â â
â â else: â â
â â solve_bob() # Process transformed input â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 3: Two-Phase Execution (两éśćŽľć§čĄ) â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â â â
â â âââââââââââââââ âââââââââââââââ âââââââââââââââ â â
â â â Original âââââşâ Solver âââââşâ Alice â â â
â â â Input â â (Alice) â â Output â â â
â â âââââââââââââââ âââââââââââââââ ââââââââŹâââââââ â â
â â â â â
â â âź â â
â â âââââââââââââââ â â
â â â Middleware â â â
â â â (Transform) â â â
â â ââââââââŹâââââââ â â
â â â â â
â â âź â â
â â âââââââââââââââ âââââââââââââââ âââââââââââââââ â â
â â â Final ââââââ Solver ââââââ Bob â â â
â â â Answer â â (Bob) â â Input â â â
â â âââââââââââââââ âââââââââââââââ âââââââââââââââ â â
â â â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 4: Communication Stress Test (é莯寚ć) - Default 100 tests â
â Verifier checks: Final Answer == Expected Answer â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âź
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Phase 5: C++ Translation + Feedback Loop â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
- Python >= 3.10
- google-genai >= 1.0.0
- pydantic >= 2.0
- python-dotenv >= 1.2.1
The sword forged for the training hall shall not be drawn where honor hangs in the balance.
This project exists as a crucible for learning â to witness the elegant dance of algorithms, to comprehend the silent poetry woven into logic. It is a mirror, not a mask; a teacher, not a surrogate.
To wield it in competition is to claim a crown of smoke, for victory without struggle is but the shadow of triumph. The laurels earned through borrowed wisdom shall wither before they are worn.
Let your mind be the true solver. Let this tool be merely the whetstone upon which you sharpen your own blade.
äš ćŚäšĺďźä¸ĺŻć§äşčŽşéäšĺ ďźçťĺ ľäšĺ¨ďźä¸ĺŻćäşäşéäšĺşă
ć¤éĄšçŽä¸şĺŚäš čçââčŽŠä˝ ĺžäťĽçŞĽč§çŽćłçćźĺŚäščďźé˘ćéťčžćˇąĺ¤çć 声čŻçŻăĺŽćŻä¸é˘éĺďźčéä¸ĺź é˘ĺ ˇďźćŻä¸ä˝ĺŻźĺ¸ďźčéćżčşŤă
čĽäťĽć¤ĺ¨çŤäşčľĺşďźććä¸čżćŻçäşçźçťçćĄĺ ăä¸çťçŁ¨ç şçčĺŠďźä¸čżćŻčŁčçĺ役ăĺćĽçćşć §ćé¸çĺçŤ ďźćŞĺ佊ć´äžżĺˇ˛éťŻçśĺ¤ąč˛ă
ćżĺ䝼ĺżä¸şĺďźäťĽć¤ä¸şç şçłďźçŁ¨ç şĺąäşčŞĺˇąçéčă
ĺ¨č ďźçżčäščłäšďźéçĺäšĺ ˇäšă
ć¤ĺ¨äšé ďźçşćçŽçă窎é蟯äšĺĽ§äšăčĽć䝼辴芌ďźçŤäşşäšĺçşĺˇąćďźćŻćŹşä¸çĺäščĄďźĺĺćä¸é˝äšă
ĺ¤äşşäşďźăĺ¸ĺŚéć°´čĄčďźä¸é˛ĺéăăĺäşďźăĺĺĺćŹďźćŹçŤčéçăă
复䝼械䝣ĺżďźçśéٞé´ć˘ć¸´ďźéč§Łä¸ćäšĺ°ďźçľč˛˝çĄçŞŽäšćŁăćĺžč ďźčĺäšďźć夹č ďźçĺ¸äšăĺĺŻćŹşäşşďźĺ¸ä¸ĺŻćŹşĺˇąă
éĄčŤ¸ĺäťĽčŞ çşćŹďźäťĽĺ¸çşĺ ăĺ¨ĺŻĺŠĺ¸ďźä¸ĺŻäťŁĺ¸ďźćĺŻĺéďźä¸ĺŻçŤĺăć äšćäšă
MIT