> یک سالِ **پرماجرا** و **پرفناوری** بعد...
**امیرعوس** *(AmirOsssss)* که زمانی از شرکتکنندگان خفن و کاربلد [**سری اول #المپیکفناوری پردیس**](https://quera.org/events/techolympics-0307) بود، حال پس از گذشت یک سال **پرماجرا** و **پرفناوری** و سفید شدن تعداد زیادی از موهایش، خود به **عضوی تاثیرگذار** و **ارزشمند** از کوئرا تبدیل شده و امسال عضوی از تیم طراحان و برگزارکنندگان [**سری دوم #المپیکفناوری پردیس**](https://quera.org/events/techolympics-0407) است. او که تجربهی بسیاری در شرکت و برگزاری ایونتهای خاص برنامهنویسی و هوشمصنوعی دارد، از سمت **باقر** *(Bagher)* به عنوان **مدیر تدارکات** این سری از رویداد کشوری المپیکفناوری منصوب شده است.
**زبان ایونتی** امیرعوس ترکیبی از **نمادها** و **نشانههایی** است که مشابه **الفبای انگلیسی عادی** هستند. او از یک ترتیب جدید به نام **کوئرانومریک** *(Queranumeric)* بهجای ترتیب [**دیکشنری** *(Alphanumeric)،*](https://en.wikipedia.org/wiki/Alphanumericals) برای **مرتبسازی اسامی شرکتکنندگان** استفاده میکند؛ سیستمی که در آن نمادها و کاراکترها، طبق یک **ترتیب خاص** از پیش تعیینشده، اولویت خواهند داشت. از آنجایی که امیرعوس امسال به دلیل برگزاری المپیکفناوری **به صورت بینالمللی** حسابی مشغول است، از شما میخواهد تا برنامهای بنویسید که اسامی تیمهای شرکتکننده مسابقات را به گونهای مرتب کند که ترتیب آنها بر اساس **جایگاه حروف در ترتیب کوئرانومریک** مشخص شود.

# **پروژهی اولیه**
برای دانلود **پروژهی اولیه** روی [این لینک](/problemset/assignments/4367/download_problem_initial_project/306545/) کلیک کنید.
# **جزئیات پروژه**
در ابتدا **ترتیب کوئرانومریک** به صورت **یک رشته** به شما داده میشود که شامل **کاراکترهای خاص** و دلخواه است *(ممکن است حروف، اعداد یا نمادهای دیگر هم باشد).* سپس به ترتیب $n$ رشته، که **اسامی تیمهای شرکتکنندگان المپیکفناوری** هستند، ورودی داده میشود. شما باید این اسامی را به گونهای مرتب کنید که **ترتیب آنها بر اساس جایگاه حروف در ترتیب کوئرانومریک مشخص شود.**
اگر دو رشته در بخشی از مقایسه **مساوی** باشند *(مثلاً چند حرف اولشان یکسان باشد)،* از **کاراکتر بعدی ب**رای تصمیمگیری استفاده میشود. همچنین اگر یکی از اسامی پیش از تمامشدن مقایسه تمام شود *(یعنی کوتاهتر باشد)،* آن رشته **کوچکتر** در نظر گرفته میشود.
دو عدد **صحیح و مثبت** $n$ و $l$ به ترتیب **نمایانگر تعداد تیمها** و **بیشترین طول مجاز برای اسم یک تیم** میباشند و تضمین میشود در بازهی عددی زیر قرار دارند:
$$
0 \le n \le 4000
$$
$$
1 \le l \le 5000
$$
# **ورودی**
**توجه داشته باشید که این مسئله ورودی استاندارد ندارد.**
بهجای آن، تابع زیر را در **فایل** `solution.py` پیادهسازی کنید. این تابع ورودیها را بهصورت آرگومان توسط سیستم داوری، دریافت خواهد کرد.
```python solution.py python
def queranumeric(order: list[str], words: list[str]) -> list[str]:
return []
```
- **پارامتر** `order`**:** لیستی از **کاراکترهای بدون تکرار** است که **ترتیب کوئرانومریک** را مشخص میکند؛ **عنصر اول بااولویتترین کاراکتر** و به همین ترتیب تا انتها و عنصر انتهایی، **کمترین اولویت** را در مرتبسازی خواهد داشت.
- **پارامتر** `words`**:** **لیستی از رشتهها،** که همان اسامی تیمهای شرکتکننده هستند، که باید بر اساس **ترتیب کوئرانومریک** مرتب شوند.
**نکته:** اگر **کاراکتری** در `words` وجود داشته باشد که در `order` نیامده است، آن کاراکتر، **کماهمیتتر از همهی کاراکترهای موجود** در `order` در نظر گرفته خواهد شد.
# **خروجی**
تابع باید **لیستِ جدیدِ مرتبشده** از اساسی تیمهای شرکتکننده را مطابق **ترتیب کوئرانومریک** برگرداند *(*`return` *کند).*
# **مثال**
### **ورودی نمونه ۱**
```python solution.py python
order = list("cba")
words = ["a", "ba", "cc"]
queranumeric(order, words)
```
### **خروجی نمونه ۱**
```python solution.py python
["cc", "ba", "a"]
```
+ در این مثال، **ترتیب کوئرانومریک** `"cba"` است؛ یعنی اولویت کاراکترها بهترتیب `c`، بعد `b` و در نهایت `a` است. هنگام مرتبسازی، ابتدا **حرف اول هر رشته** را با هم مقایسه میکنیم: `"cc"` با `c` شروع میشود و چون `c` بالاترین رتبه را دارد، هر رشتهای که با `c` شروع شود **جلوتر** قرار میگیرد؛ پس `"cc"` اول میآید. بین دو رشتهی باقیمانده، `"ba"` با `b` شروع میشود که از `a` مهمتر است، بنابراین `"ba"` قبل از `"a"` میآید.
### **ورودی نمونه ۲**
```python solution.py python
order = list("namrepus")
words = ["sun", "man", "super", "name", "user", "spam", "ram"]
queranumeric(order, words)
```
### **خروجی نمونه ۲**
```python solution.py python
["name", "man", "ram", "user", "spam", "sun", "super"]
```
+ در اینجا **ترتیب کوئرانومریک** `"namrepus"` است؛ یعنی **اولویت** از `n` شروع و بهترتیب `a`، `m`، `r`، `e`، `p`، `u` و در نهایت `s` است. ابتدا `"name"` که با `n` شروع میشود در **ابتدای لیست مرتبشده** قرار میگیرد، چون **بالاترین اولویت** را دارد. سپس رشتههایی که با `a`، `m` و `r` شروع میشوند بهترتیب میآیند: `"man"` (شروع با `m`) قبل از `"ram"` (شروع با `r`) قرار میگیرد چون `m` در رتبهی بالاتری از `r` است. باقی رشتهها با `u` و `s` شروع میشوند که در **انتهای ترتیب** هستند؛ طبق اولویت، رشتههای شروعشده با `u` (`"user"`) قبل از رشتههای شروعشده با `s` (`"spam"`, `"sun"`, `"super"`) میآیند و در میان `s`-ها، مقایسه به حروف بعدی کشیده میشود که **ترتیب** `"spam"`, `"sun"`, `"super"` را رقم میزند.
# **آنچه باید آپلود کنید**
+ **توجه**: پس از پیادهسازی تابع خواسته شده، **فایل** `solution.py` را برای سیستم داوری ارسال کنید.
+ **توجه**: شما مجاز به افزودن فایل جدیدی در این ساختار **نیستید** و تنها باید تغییرات را در **فایل** `solution.py` اعمال کنید.
+ **توجه**: ایجاد هرگونه **تغییرات اضافی** در **امضا** *(Signature)* و **خروجی تابع** `queranumeric` که خارج از تعریف سوال باشد، در سیستم داوری **مورد پذیرش قرار نگرفته** و نمرهای دریافت **نخواهد** کرد.
+ **توجه:** **فایل** `solution.py` **نباید** هیچ **عملکرد اضافهای** برای گرفتن **ورودی استاندارد** *(stdin)* و دادن **خروجی استاندارد** *(stdout)* مانند `print` کردن پاسخ را شامل باشد، در غیر این صورت نمرهای دریافت **نخواهد** کرد. سیستم داوری خود مسئول **فراخوانی تابع** `queranumeric`، دادن آرگومانهای ورودی به آن و بررسی خروجی میباشد.