+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
در پیامرسان ممد نام کاربران به صورت انگلیسی نوشته میشود همین موضوع باعث مشکلات فراوانی در تلفظ اسامی شده است. به عنوان مثال کلمهی `mammad` ممکن است به چهار صورت «مَمَد»، «مامَد»، «مَماد» و «ماماد» خوانده شود. به طور دقیقتر در این سوال حروف صدادار در انگلیسی $(a,e,i,o,u)$ هر کدام ممکن است به **دو حالت** خوانده شوند.
کلمهای ۶ حرفی در ورودی داده میشود تشخیص دهید این کلمه را به چند صورت میتوان خواند.
# ورودی
در تنها خط ورودی کلمهای **۶ حرفی** از **حروف کوچک انگلیسی** آمده است.
**دقت کنید که کلمهی داده شده الزاماً معنادار نخواهد بود و صرفاً شامل حروف انگلیسی است.**
# خروجی
در تنها خط خروجی تعداد روشهای خوانش این کلمه را خروجی دهید.
# مثال
## ورودی نمونه ۱
```
mammad
```
## خروجی نمونه ۱
```
4
```
همانطور که در صورت سؤال گفته شد، کلمهی `mammad` را میتوان به چهار روش «مَمَد»، «مامَد»، «مَماد» و «ماماد» خواند. در نتیجه پاسخ برابر با ۴ خواهد بود.
## ورودی نمونه ۲
```
anvari
```
## خروجی نمونه ۲
```
8
```
کلمهی `anvari` را میتوان به هشت روش «آنواری»، «آنوار ای»، «آنوَری»، «آنوَر ای»، «اَنواری»، «اَنوار ای»، «اَنوَری» و «اَنوَر ای» خواند. در نتیجه پاسخ برابر با ۸ خواهد بود.
## ورودی نمونه ۳
```
sghrwq
```
## خروجی نمونه ۳
```
1
```
از آنجا که کلمهی داده شده، حرف صدادار ندارد، پس تنها به یک حالت میتوان آن را خواند.
+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
سوباسا که از گلزنهای معروف زمان خودش بوده است، به یاد خاطرات گذشتهی خود تصمیم گرفت که دوستان خودش را جمع کند و بازی فوتبال دوستانهای ترتیب دهد. اما از آنجا که سوباسا تنها در گل زدن مهارت دارد، در شمارش گلهای زده شده دچار اشتباه شد!
سوباسا در مجموع $n$ گل به تیم حریف زده است و آنها را یادداشت کرده است و میداند که گل $i$اُم در دقیقهی $a_i$ زده شده است. اما به دلیل اینکه تعداد بازیهای زیادی انجام داده است، زمان وقتهای اضافی را به خاطر نمیآورد!
او حدس میزند که نیمهی اول بازی، $a$ دقیقه و نیمهی دوم بازی $b$ دقیقه وقت اضافه داشته است. به طور دقیقتر، نیمهی اول بازی از دقیقهی $0$ تا $45 + a$ (شامل خود این دقایق) و همچنین نیمهی دوم بازی از دقیقهی $45$ تا $90 + b$ (شامل خود این دقایق) بوده است.
حال او میخواهد بداند که آیا ممکن است زمان وقتهای اضافی را درست حدس زده باشد. به عبارتی دیگر، آیا عددی مانند $k \le n$ وجود دارد که گلهای $1$ تا $k$، **به ترتیب زمانی** در نیمهی اول و گلهای $k + 1$ تا $n$، **به ترتیب زمانی** در نیمهی دوم زده شده باشند.
**دقت کنید که $n$ گلی که سوباسا یادداشت کرده است، به ترتیب زمانی بودهاند.** به عبارتی دیگر، گل $i$اُم، پیش از گل $i + 1$اُم زده شده است و او صرفاً ممکن است در محاسبهی $a$ و $b$ اشتباه کرده باشد. همچنین دقت کنید که وقتهای اضافهی بازیای که سوباسا گلهای آن را یادداشت کرده است، **الزاماً کمتر یا مساوی ۱۰ نیستند.**
# ورودی
ورودی شامل دو خط است که در خط اول، به ترتیب اعداد $n$ و $a$ و $b$ آمده است و در خط بعدی، $n$ عدد آمده است که عدد $i$ نشاندهندهی $a_i$ است.
$$1 \le n \le 100$$
$$1 \le a, b \le 10$$
$$0 \le a_i \le 100$$
**تضمین میشود $a_i$ها متمایزاند و همچنین دنبالهی گلهای داده شده به ترتیب زمانی است (لزوماً صعودی نیست).**
# خروجی
در صورتی که دنبالهی داده شده از زمان زدن گلها، دنبالهای معتبر بود، عبارت `YES` را چاپ کنید و در غیر این صورت عبارت `NO` را چاپ کنید.
## ورودی نمونه ۱
```
4 2 4
4 45 48 93
```
## خروجی نمونه ۱
```
YES
```
میتوان گلهای اول و دوم را برای نیمهی اول و باقی گلها را برای نیمهی دوم در نظر گرفت، در نتیجه پاسخ `YES` است.
## ورودی نمونه ۲
```
5 3 2
4 47 45 80 91
```
## خروجی نمونه ۲
```
YES
```
میتوان گلهای اول و دوم را برای نیمهی اول و باقی گلها را برای نیمهی دوم در نظر گرفت، در نتیجه پاسخ `YES` است.
## ورودی نمونه ۳
```
4 2 2
4 48 45 80
```
## خروجی نمونه ۳
```
NO
```
از آنجا که گل دوم را نمیتوان برای نیمهی اول در نظر گرفت، پس باید برای نیمهی دوم در نظر گرفت، اما در این صورت ترتیب زمانی گل دوم و سوم رعایت نشده است و در نتیجه پاسخ `NO` است.
## ورودی نمونه ۴
```
6 3 2
8 48 45 70 81 94
```
## خروجی نمونه ۴
```
NO
```
از آنجا که گل ششم نه در نیمهی اول و نه در نیمهی دوم میتواند قرار بگیرد، پس پاسخ `NO` است.
+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
ممد $n$ کلمهی مشکوک دارد که معنی آنها را نمیداند، او میخواهد برای یافت معنی کلمات، شباهت دیگر کلمات را با آنها بسنجد. به همین جهت او $k$ بار کلمهای دلخواه در نظر میگیرد (نه لزوما از کلمات مشکوک) و تعداد کلمات مشکوک مشابه با آن را میشمارد. طبق تعریف او دو کلمه مشابهاند اگر حداقل یکی از شروط زیر را دارا باشند: (هر شرط باید مجزا بررسی شود و ترکیب کردن آنها مورد نظر نیست، به عنوان مثال نمیتوان ابتدا حرفها را بزرگ و کوچک کرد و سپس یک حرف حذف کرد. برای درک بهتر به کلمهی چهارم مثال نمونه توجه کنید)
+ بتوان با حذف یک حرف از یکی از این کلمات به کلمهی دیگر رسید. (برای مثال دو کلمهی `abc` و `ac` مشابهاند)
+ بتوان با تغییر یک حرف از یکی از این کلمات به کلمهی دیگر رسید. (برای مثال دو کلمهی `abc` و `axc` مشابهاند)
+ بتوان با بزرگ یا کوچک کردن حرفهای یک کلمه به کلمهی دیگر رسید. (برای مثال دو کلمهی `AbC` و `ABc` مشابهاند همچنین کلمهی `abc` با خودش مشابه است)
# ورودی
در خط اول ورودی $n$ و $k$ آمده که نشان دهندهی تعداد کلمات مشکوک و تعداد کلمات انتخابی است.
$$1 \le n, k \le 50$$
در هر یک از $n$ خط بعدی یک کلمهی مشکوک آمده است. سپس در خط $i$ام از $k$ خط بعدی کلمهی دلخواه ممد در بار $i$ام آمده است.
**تضمین میشود هر کلمه تنها از حروف بزرگ و کوچک انگلیسی تشکیل شده است. همچنین تضمین میشود طول هر کلمه حداکثر ۵۰ است.**
# خروجی
در خط $i$ام از $k$ خط خروجی **تعداد کلمات مشکوک مشابه** با کلمهی دلخواه $i$ام را خروجی دهید.
# مثال
## ورودی نمونه ۱
```
3 8
hamKaran
system
systemi
sstem
hamKarani
hamkaran
hamkarani
pYstem
pystem
pystemi
systema
```
## خروجی نمونه ۱
```
1
1
1
0
0
1
1
2
```
کلمات مشکوک سه کلمهی اول یعنی `hamKaran`، `system` و `systemi` هستند و باید تشابه باقی کلمات را با آنها بیابیم.
+ کلمهی `sstem` طبق شرط اول با `system` مشابه است.
+ کلمهی `hamKarani` طبق شرط اول با `hamKaran` مشابه است.
+ کلمهی `hamkaran` طبق شرط سوم با `hamKaran` مشابه است.
+ کلمهی `hamkarani` با هیچ یک مشابه نیست. (توجه کنید سه شرط مستقل هستند و هر کدام باید جداگانه بررسی شود)
+ کلمهی `pYstem` با هیچ یک مشابه نیست.
+ کلمهی `pystem` طبق شرط دوم با `system` مشابه است.
+ کلمهی `pystemi` طبق شرط دوم با `systemi` مشابه است.
+ کلمهی `systema` طبق شرط دوم با `systemi` و طبق شرط اول با `system` مشابه است.
+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
ممد میخواهد دیوار خانهاش را رنگ کند، دیوار او به صورت یک جدول $n \times m$ است. برای این کار در هر مرحله سطل رنگی برمیدارد و یک زیر جدول مربعی از دیوار را با آن رنگ رنگآمیزی میکند. (ممکن است خانهای چندین بار رنگآمیزی شود) حال او کنجکاو شده که تعداد رنگهای مختلف روی دیوار را بیابد به او در یافتن این تعداد کمک کنید!
رنگ دو خانهی جدول متفاوت است اگر **مجموعه رنگهایی که روی آن زده شده** با هم متمایز باشد همچنین توجه کنید که رنگ هر سطل با رنگ باقی سطلها متفاوت است. برای درک بهتر به توضیحات مثال توجه کنید.
# ورودی
در خط اول ورودی به ترتیب $n$، $m$ و $k$ آمده که نشان دهندهی تعداد ردیفهای جدول، تعداد ستونهای جدول و تعداد سطلهای رنگی است که ممد استفاده میکند.
$$ 1 \le n,m,k \le 50$$
در خط $i$ام از $k$ خط بعدی به ترتیب $r_i$، $c_i$ و $l_i$ آمده که نشان دهندهی شمارهی سطر و ستون خانهی بالا چپ مربع و طول ضلع آن است.
$$ 1 \le r_i \le n$$
$$ 1 \le c_i \le m$$
$$ 1 \le r_i + l_i - 1 \le n$$
$$ 1 \le c_i + l_i - 1 \le m$$
$$ 1 \le l_i \le \min(n, m)$$
# زیرمسئلهها
| محدودیتها | نمره |
|:-:|:-:|
| $$ 1 \le k \le 20$$ | ۵۴ |
| بدون محدودیت | ۱۲۶ |
# خروجی
در تنها خط خروجی تعداد رنگهای مختلف روی دیوار را خروجی دهید.
# مثال
## ورودی نمونه ۱
```
5 5 3
1 1 3
2 2 4
1 3 3
```
## خروجی نمونه ۱
```
7
```
شکل دیوار به صورت زیر است:
![توضیح مثال ۱](https://s4.uupload.ir/files/screenshot_from_2021-08-19_13-48-14_vuwo.png)
در هر خانه شماره سطلهایی که آن خانه توسطشان رنگ شده نوشته شده است. حال به ازای هر خانه رنگ آن را در نظر میگیریم (در واقع رنگ یک خانه مجموعه سطلهایی است که با آن رنگ شده) و مجموعههای مختلف ایجاد شده را میشماریم.
$$\{1\}, \{2\}, \{3\}, \{1,2\}, \{1,3\}, \{2,3\}, \{1, 2, 3\}$$
## ورودی نمونه ۲
```
3 4 3
1 1 1
2 2 2
1 3 2
```
## خروجی نمونه ۲
```
4
```
![توضیح مثال ۲](https://s4.uupload.ir/files/screenshot_from_2021-08-19_14-33-14_ywo6.png)
در این مثال رنگهای مختلف به صورت زیر است:
$$ \{1\}, \{2\}, \{3\}, \{2,3\} $$
+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
سامانه گلستان، یک سامانه بسیار قوی و کارآمد است که برای وضعیت تحصیلی دانشجوها و برگزاری و ثبت نام کلاسهای دانشجوها طراحی شده است.
هر دانشجو و هر استاد به محض ورود به دانشگاه در سامانه گلستان ثبت نام میکنند. در این سامانه مشخصات هر کدام وارد میشود. همچنین تعدادی کلاس در سامانه گلستان تعریف میشود. هر دانشجو میتواند در تعدادی از این کلاسها ثبت نام کند.
اساتید نمرات را در سامانه گلستان وارد میکنند و دانشجویان هم در این سامانه میتوانند نمرات خود را در این سامانه ببینند.
<details class="green">
<summary>
**دانشجو**
</summary>
+ **اسم `name`**
+ یک رشته به طول حداقل $1$ و حداکثر $20$ از حروف کوچک انگلیسی است.
+ **کد ملی `identical_num`**
+ یک رشته $10$ رقمی از ارقام $0$ تا $9$ است.
+ **سال ورودی `entering_year`**
+ یک عدد صحیح بین $1300$ تا $1500$ است. (شامل دو سر بازه)
+ **رشته تحصیلی `field`**
+ یک رشته به طول حداقل $1$ و حداکثر $20$ از حروف کوچک انگلیسی است.
</details>
<details class="green">
<summary>
**استاد**
</summary>
+ **اسم `name`**
+ یک رشته طول حداقل $1$ و حداکثر $20$ از حروف کوچک انگلیسی است.
+ **کد ملی `identical_num`**
+ یک رشته $10$ رقمی از ارقام $0$ تا $9$ است.
+ **رشته تحصیلی `field`**
+ یک رشته به طول حداقل $1$ و حداکثر $20$ از حروف کوچک انگلیسی است.
</details>
<details class="green">
<summary>
**کلاس**
</summary>
+ **اسم `name`**
+ یک رشته به طول حداقل $1$ و حداکثر $20$ از حروف کوچک انگلیسی است.
+ **کد کلاس `class_id`**
+ یک رشته $10$ رقمی از ارقام $0$ تا $9$ است.
+ **رشته `field`**
+ یک رشته به طول حداقل $1$ و حداکثر $20$ از حروف کوچک انگلیسی است.
+ **استاد `professor`**
+ یک استاد برای تدریس این درس است.
+ **دانشجویان `students`**
+ یک لیست از دانشجویانی که این درس را میآموزند است.
</details>
از شما میخواهیم تا به صورت مرحله به مرحله این سامانه را طراحی کنید. در واقع در پیاده سازی هر فاز از دستورات **فاز قبلی** هم استفاده خواهد شد.
<details class="blue">
<summary>
**فاز اوّل**
</summary>
<details class="blue">
<summary>
**درخواست `register_student`**
</summary>
```
register_student <name> <identical_num> <entering_year> <field>
```
در این درخواست یک دانشجو نام `<name>`، کد ملی `<identical_num>`، سال ورودی `<entering_year>`، رشته تحصیلی `<field>` خود را وارد می کند و اقدام به ثبت نام در سامانه گلستان میکند.
در صورتی که یک دانشجو **یا استاد** دیگر قبلاً با کد ملی (`identical_num`) مشابه در سیستم ثبت نام کرده است پیام `this identical number previously registered` را چاپ کنید.
بعد از ثبت نام با موفقیت پیام `welcome to golestan` را چاپ کنید.
</details>
<details class="blue">
<summary>
**درخواست `register_professor`**
</summary>
```
register_professor <name> <identical_num> <field>
```
در این درخواست یک استاد نام `<name>`، کد ملی `<identical_num>`، رشته تدریس `<field>` خود را وارد میکند و اقدام به ثبت نام میکند.
در صورتی که یک **دانشجو یا** استاد دیگر قبلاً با کد ملی (`identical_num`) مشابه در سیستم ثبت نام کرده است پیام `this identical number previously registered` را چاپ کنید.
بعد از ثبت نام با موفقیت پیام `welcome to golestan` را چاپ کنید.
</details>
<details class="blue">
<summary>
**درخواست `make_class`**
</summary>
```
make_class <name> <class_id> <field>
```
در این درخواست یک کلاس با نام `<name>` و کد درس `<class_id>` برای رشته تحصیلی `<field>` ایجاد میشود.
اگر این کد کلاس دیگری قبلاً استفاده شده است، پیام `this class id previously used` را چاپ کنید.
در غیر این صورت پیام `class added successfully` را چاپ کنید.
</details>
</details>
<details class="blue">
<summary>
**فاز دوم**
</summary>
<details class="blue">
<summary>
**درخواست `add_student`**
</summary>
```
add_student <identical_num> <class_id>
```
در این درخواست یک دانشجو با کد ملی `<identical_num>` درخواست اضافه شدن به کلاس با کد `<class_id>` را دارد.
+ در صورتی که چنین دانشجویی وجود ندارد پیام `invalid student` را چاپ کنید.
+ در صورتی که چنین کلاسی وجود ندارد پیام `invalid class` را چاپ کنید.
+ در صورتی که رشته تحصیلی این دانشجو با `<field>` این کلاس یکسان نیست پیام `student field is not match` را چاپ کنید.
+ در صورتی که این دانشجو قبلاً در این کلاس ثبت نام کرده است پیام `student is already registered` را چاپ کنید.
+ در صورتی که هیچ کدام از حالتهای فوق پیش نیامد پیام `student added successfully to the class` را چاپ کنید.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
</details>
<details class="blue">
<summary>
**درخواست `add_professor`**
</summary>
```
add_professor <identical_num> <class_id>
```
در این درخواست یک استاد با کد ملی `<identical_num>` میخواهد تدریس کلاس با کد `<class_id>` را به عهده بگیرد.
+ در صورتی که چنین استادی وجود ندارد پیام `invalid professor` را چاپ کنید.
+ در صورتی که چنین کلاسی وجود ندارد پیام `invalid class` را چاپ کنید.
+ در صورتی که رشته تدریس این استاد با `<field>` این کلاس یکسان نیست پیام `professor field is not match` را چاپ کنید.
+ در صورتی که برای این کلاس استادی از قبل تعریف شده است پیام `this class has a professor` را چاپ کنید.
+ در صورتی که هیچ کدام از حالتهای فوق پیش نیامد پیام `professor added successfully to the class` را چاپ کنید.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
</details>
<details class="blue">
<summary>
**درخواست `student_status`**
</summary>
```
student_status <identical_num>
```
در صورتی که دانشجویی با کد ملی `<identical_num>` وجود ندارد پیام `invalid student` را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام دانشجو (`student_name`)، سال ورودی (`entering_year`)، رشته تحصیلی (`field`) و
نام (`name`) کلاسهایی که این دانشجو در آنها شرکت میکند را **به ترتیب ثبت** نام چاپ کنید. در صورتی که این دانشجو در هیچ کلاسی ثبت نام نکرده است هیچ چیزی چاپ نکنید.
</details>
<details class="blue">
<summary>
**درخواست `professor_status`**
</summary>
```
professor_status <identical_num>
```
در صورتی که استادی با کد ملی `<identical_num>` وجود ندارد پیام `invalid professor` را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام استاد (`professor_name`)، رشته تحصیلی (`field`) و
نام (`name`) کلاسهایی که این استاد در آنها تدریس میکند را **به ترتیب ثبت** نام چاپ کنید. در صورتی که این استاد تدریس هیچ کلاسی را به عهده نگرفته است هیچ چیزی چاپ نکنید.
</details>
<details class="blue">
<summary>
**درخواست `class_status`**
</summary>
```
class_status <class_id>
```
در صورتی که چنین کلاسی برای این رشته وجود ندارد پیام `invalid class` را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام (`name`) استادی که در این کلاس تدریس میکند را چاپ کنید. در صورتی که هیچ استادی برای تدریس این کلاس وجود ندارد کلمه `None` را به جای نام استاد، چاپ کنید.
سپس نام(`name`) تمامی دانشجویان این کلاس را به ترتیبی که در این کلاس ثبت نام کردهاند را در یک سطر و با فاصله چاپ کنید. اگر هیچ دانشجویی وجود ندارد **هیچ چیزی** چاپ نکنید.
</details>
</details>
<details class="blue">
<summary>
**فاز سوم**
</summary>
<details class="blue">
<summary>
**درخواست `set_final_mark`**
</summary>
```
set_final_mark <professor_identical_num> <student_identical_num> <class_id> <mark>
```
در این درخواست استادی با کد ملی `<professor_identical_num>` برای دانشجویی با کد ملی `<student_identical_num>` در درسی با کد `<class_id>` نمره پایان ترم `<mark>` را ثبت میکند.
+ در صورتی که استادی با این کد ملی وجود ندارد پیام `invalid professor` را چاپ کنید.
+ در صورتی که دانشجویی با این کد ملی وجود ندارد پیام `invalid student` را چاپ کنید.
+ در صورتی که کلاسی با این کد کلاس وجود ندارد پیام `invalid class` را چاپ کنید.
+ در صورتی که این استاد این درس را تدریس نمیکند پیام `professor class is not match` را چاپ کنید.
+ در صورتی که این دانشجو در این کلاس ثبت نام نکرده است پیام `student did not registered` را چاپ کنید.
در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد، نمره پایان ترم این دانشجو را برای این درس برابر `<grade>` قرار دهید. اگر نمرهای قبلاً ثبت شده آن را به این نمره **تغییر** دهید. در نهایت پیام `student final mark added or changed` را چاپ کنید.
تضمین میشود که `<grade>` یک عدد صحیح بین $0$ تا $20$ (شامل هر دو) است.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
</details>
<details class="blue">
<summary>
**درخواست `mark_student`**
</summary>
```
mark_student <identincal_num> <class_id>
```
در این درخواست نمره دانشجو با کد ملی `<identical_num>` برای درس با کد `<class_id>`
نمایش داده میشود.
+ در صورتی که دانشجویی با این کد ملی وجود ندارد پیام `invalid student` را چاپ کنید.
+ در صورتی که کلاسی با این کد وجود ندارد پیام `invalid class` را چاپ کنید.
+ در صورتی که این دانشجو در این کلاس ثبت نام نکرده است پیام `student did not registered` را چاپ کنید.
+ در صورتی که هیچ نمرهای برای این درس هنوز ثبت نشده است کلمه `None` را چاپ کنید.
در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد، **آخرین نمره** ثبت شده این دانشجو را برای این درس چاپ کنید.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
</details>
<details class="blue">
<summary>
**درخواست `mark_list`**
</summary>
```
mark_list <class_id>
```
در این درخواست لیست نمرات کلاس با کد `<class_id>` نمایش داده میشود.
+ در صورتی که کلاسی با این کد کلاس وجود ندارد پیام `invalid class` را چاپ کنید.
+ در صورتی که استادی برای این کلاس وجود ندارد پیام `no professor` را چاپ کنید.
+ در صورتی که این کلاس هیچ دانشجویی ندارد پیام `no student` را چاپ کنید.
در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد به ترتیب دانشجوهایی که در کلاس ثبت نام کردهاند. نمره هر دانشجو را در یک سطر و با یک فاصله بین آنها چاپ کنید. اگر نمرهای برای یک دانشجو ثبت نشده به جای نمره آن کلمه `None` را چاپ کنید.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
</details>
<details class="blue">
<summary>
**درخواست `average_mark_professor`**
</summary>
```
average_mark_professor <identical_num>
```
در این درخواست میانگین نمرات ثبت شده توسط استادی با کدملی `<identical_num>` نمایش داده میشود.
در صورتی که استادی با این کد ملی وجود ندارد پیام `invalid professor` را چاپ کنید.
در غیر این صورت میانگین تمام نمراتی که این استاد برای تمام دانشجوها (در همه کلاسهایش) ثبت کرده است را به صورت یک عدد اعشاری با دقت دقیقاً دو رقم بعد از اعشار چاپ کنید.
اگر یک استاد برای یک دانشجو در یک کلاس نمرهای را تغییر دهد فقط **نمره جدید** در میانگین در نظر گرفته میشود.
در صورتی که این استاد هیچ نمرهای ثبت نکرده است کلمه `None` را چاپ کنید.
منظور از میانگین نمرات ثبت شده برای یک استاد یعنی مجموع نمرات ثبت شده توسط این استاد تقسیم بر تعداد نمرات ثبت شده توسط این استاد.
</details>
<details class="blue">
<summary>
**درخواست `average_mark_student`**
</summary>
```
average_mark_student <identincal_num>
```
در این درخواست میانگین نمرات ثبت شده برای دانشجویی با کدملی `<identical_num>` نمایش داده میشود.
در صورتی که دانشجویی با این کد ملی وجود ندارد پیام `invalid student` را چاپ کنید.
در غیر این صورت میانگین تمام نمراتی که این دانشجو از تمام استادها (در همه کلاسهایش) دریافت کرده است را به صورت یک عدد اعشاری با دقت دقیقاً دو رقم بعد از اعشار چاپ کنید.
اگر یک استاد برای یک دانشجو در یک کلاس نمرهای را تغییر دهد فقط **نمره جدید** در میانگین در نظر گرفته میشود.
در صورتی که این دانشجو هیچ نمرهای دریافت نکرده است عبارت `None` را چاپ کنید.
منظور از میانگین نمرات دریافت شده برای یک دانشجو یعنی مجموع نمرات دریافت شده این دانشجو تقسیم بر تعداد نمرات دریافت شده توسط این دانشجو.
</details>
<details class="blue">
<summary>
**درخواست `top_student`**
</summary>
```
top_student <field> <entering_year>
```
در این درخواست نام دانشجویی که در رشته `<field>` و ورودی سال `<entering_year>` میانگین نمرات بیشتری دارد را چاپ کنید.
در صورتی که هیچ دانشجویی با این مشخصات وجود ندارد به جای نام آن کلمه `None` را چاپ کنید.
در صورتی که چند دانشجو با این مشخصات وجود دارد و همگی میانگین نمره یکسانی دارند، نام دانشجویی را چاپ کنید که زودتر ثبت نام کرده است.
</details>
<details class="blue">
<summary>
**درخواست `top_mark`**
</summary>
```
top_mark <class_id>
```
در این درخواست بیشترین نمره ثبت شده برای دانشجوهای کلاس `<class_id>` نمایش داده میشود.
در صورتی که چنین کلاسی وجود ندارد پیام `invalid class` را چاپ کنید.
در صورتی که هیچ دانشجویی در این کلاس هیچ نمرهای دریافت نکرده است، کلمه`None` را چاپ کنید.
در غیر این صورت بیشترین نمره ثبت شده برای دانشجویان این کلاس را چاپ کنید.
</details>
</details>
# ورودی
در هر سطر از ورودی تعدادی از دستورات گفته شده میآید. تضمین میشود که تعداد این دستورات از $200$ بیشتر نخواهد بود.
برای نشان دادن پایان دستورات، بعد از آخرین سطر کلمه `end` در یک خط ورودی داده میشود.
**نمره دهی این سوال به این صورت است:**
+ فاز اول $25$ امتیاز
+ فاز دوم $100$ امتیاز
+ فاز سوم $125$ امتیاز
# خروجی
در هر سطر از خروجی پاسخ مناسب هر دستور را چاپ کنید.
# مثال
## ورودی نمونه ۱
```
register_student ali 0012233445 1398 software
register_student alireza 0012233445 1397 cs
register_student erfan 0043332227 1400 software
register_professor ahmadi 0014433225 software
make_class riaziyek 9876543210 math
make_class riaziyek 5552255522 software
add_student 0012233444 5552255522
add_student 0012233445 5552255522
add_professor 0014433225 5552255522
student_status 0012233445
add_student 0043332227 9876543210
add_student 0043332227 5552255522
student_status 0043332227
professor_status 0014433225
class_status 5552255522
set_final_mark 0014433225 0012233445 5552255522 18
mark_student 0012233445 5552255522
mark_student 0043332227 5552255522
set_final_mark 0014433225 0043332227 5552255522 19
mark_student 0012233445 5552255522
mark_student 0043332227 5552255522
mark_list 5552255522
top_mark 5552255522
top_student software 1398
top_student software 1401
end
```
## خروجی نمونه ۱
```
welcome to golestan
this identical number previously registered
welcome to golestan
welcome to golestan
class added successfully
class added successfully
invalid student
student added successfully to the class
professor added successfully to the class
ali 1398 software riaziyek
student field is not match
student added successfully to the class
erfan 1400 software riaziyek
ahmadi software riaziyek
ahmadi ali erfan
student final mark added or changed
18
None
student final mark added or changed
18
19
18 19
19
ali
None
```
## ورودی نمونه ۲
```
register_student karimi 0023333334 1405 math
register_professor hajjarian 9987777776 math
register_professor azari 8876666665 math
make_class adadi 6222816098 math
make_class jabr 6222816099 math
add_professor 9987777776 6222816098
add_professor 8876666665 6222816099
add_professor 9987777776 6222816099
add_student 0023333334 6222816098
add_student 0023333334 6222816099
set_final_mark 9987777776 0023333334 6222816098 19
set_final_mark 9987777776 0023333334 6222816099 18
set_final_mark 8876666665 0023333334 6222816099 17
set_final_mark 8876666665 0023333334 6222816099 13
set_final_mark 9987777776 0023333334 6222816098 11
average_mark_professor 9987777776
average_mark_professor 8876666665
average_mark_student 0023333334
mark_list 6222816098
mark_list 6222816099
student_status 0023333334
professor_status 9987777776
professor_status 8876666665
class_status 6222816098
class_status 6222816099
end
```
## خروجی نمونه ۲
```
welcome to golestan
welcome to golestan
welcome to golestan
class added successfully
class added successfully
professor added successfully to the class
professor added successfully to the class
this class has a professor
student added successfully to the class
student added successfully to the class
student final mark added or changed
professor class is not match
student final mark added or changed
student final mark added or changed
student final mark added or changed
11.00
13.00
12.00
11
13
karimi 1405 math adadi jabr
hajjarian math adadi
azari math jabr
hajjarian karimi
azari karimi
```
+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
میخواهیم دستگاه خودپردازی را شبیهسازی کنیم که عملیات مختلف را پیشتیبانی میکند. توضیحات هر عملیات در قسمت مربوطه آمده است.
<details class="blue">
<summary>
ثبتنام (`REGISTER`)
</summary>
## فرمت ورودی
```
REGISTER USERNAME TIMESTAMP
```
## توضیحات
یک یوزر با نام `USERNAME` در زمان `TIMESTAMP` در خودپرداز ثبتنام میکند.
## خروجی
+ در صورتی که در زمان ثبتنام، یوزری با نام `USERNAME` ثبتنام کرده باشد، پیغام `Duplicate User!` چاپ شود.
+ در غیر این صورت، پیغام `Registered Successfully` چاپ شود.
</details>
<details class="blue">
<summary>
واریز به حساب (`DEPOSIT`)
</summary>
## فرمت ورودی
```
DEPOSIT USERNAME AMOUNT TIMESTAMP
```
## توضیحات
مقدار `AMOUNT` واحد پول در زمان `TIMESTAMP` به حساب یوزر با نام `USERNAME` اضافه میگردد.
## خروجی
+ در صورتی که در زمان افزایش موجودی، یوزری با نام `USERNAME` وجود نداشت، پیغام `No Such User Found!` چاپ شود.
+ در غیر این صورت، موجودی حساب یوزر با نام `USERNAME` پس از افزایش موجودی چاپ شود.
</details>
<details class="blue">
<summary>
برداشت از حساب (`WITHDRAW`)
</summary>
## فرمت ورودی
```
WITHDRAW USERNAME AMOUNT TIMESTAMP
```
## توضیحات
مقدار `AMOUNT` واحد پول در زمان `TIMESTAMP` از حساب یوزر با نام `USERNAME` کم میگردد و به ازای آن، به اندازهی `AMOUNT` واحد پول، از اسکناسهای داخل خودپرداز کم میشود.
## خروجی
+ در صورتی که در زمان برداشت از حساب، یوزری با نام `USERNAME` وجود نداشت، پیغام `No Such User Found!` چاپ شود.
+ در صورتی که مقدار `AMOUNT` **بیش از ۲۰۰ واحد** پول بود، پیغام `Maximum Amount Exceeded!` چاپ شود.
+ در صورتی که در زمان برداشت از حساب، موجودی حساب با نام `USERNAME` کمتر از مقدار `AMOUNT` بود، پیغام `Not Enough Fund!` چاپ شود.
+ در صورتی که با اسکناسهای داخل دستگاه نمیتوانستیم مقدار خواسته شده را پرداخت کنیم، پیغام `Not Enough Banknotes!` چاپ شود.
+ در غیر این صورت، موجودی حساب یوزر با نام `USERNAME` پس از برداشت از حساب چاپ شود.
</details>
<details class="blue">
<summary>
انتقال موجودی (`TRANSFER`)
</summary>
## فرمت ورودی
```
TRANSFER SENDER_USERNAME RECEIVER_USERNAME AMOUNT TIMESTAMP
```
## توضیحات
مقدار `AMOUNT` واحد پول در زمان `TIMESTAMP` از حساب یوزر با نام `SENDER_USERNAME` کم میگردد و **دقیقاً یک ساعت پس از آن** به حساب یوزر با نام `RECEIVER_USERNAME` واریز میگردد.
## خروجی
+ در صورتی که در زمان `TIMESTAMP`، یوزری با نام `SENDER_USERNAME` و یا همچنین یوزری با نام `RECEIVER_USERNAME` وجود نداشت، پیغام `No Such User Found!` چاپ شود.
+ در صورتی که مقدار `AMOUNT` بیش از **۳۰۰۰ واحد** پول بود، پیغام `Maximum Amount Exceeded!` چاپ شود.
+ در صورتی که موجودی یوزر حساب با نام `SENDER_USERNAME` کمتر از `AMOUNT` واحد پول بود، پیغام `Not Enough Fund!` چاپ شود.
+ در غیر این صورت، موجودی حساب یوزر با نام `SENDER_USERNAME` پس از انتقال موجودی چاپ شود.
</details>
<details class="blue">
<summary>
استعلام موجودی (`GET_BALANCE`)
</summary>
## فرمت ورودی
```
GET_BALANCE USERNAME TIMESTAMP
```
## توضیحات
در زمان `TIMESTAMP`، موجودی حساب یوزر با نام `USERNAME` را چاپ میکند و مقدار **۱۰ واحد** پول از آن حساب کم میکند.
## خروجی
+ در صورتی که در زمان `TIMESTAMP`، یوزری با نام `USERNAME` وجود نداشت، پیغام `No Such User Found!` چاپ شود.
+ در صورتی که موجودی حساب یوزر با نام `USERNAME` در هنگام اجرای عملیات کمتر از **۱۰ واحد** پول بود، پیغام `Not Enough Fund!` چاپ شود.
+ در غیر این صورت، موجودی حساب یوزر با نام `USERNAME` پس از کم شدن **۱۰ واحد** پول چاپ شود.
</details>
<details class="blue">
<summary>
افزودن اسکناس (`ADD_BANKNOTE`)
</summary>
## فرمت ورودی
```
ADD_BANKNOTE VALUE AMOUNT TIMESTAMP
```
## توضیحات
در زمان `TIMESTAMP`، به تعداد `AMOUNT` اسکناس، هر یک به ارزش `VALUE` به اسکناسهای داخل خودپرداز اضافه میگردد.
**تضمین میشود مقدار `VALUE` یکی از مقادیر ۱، ۵، ۱۰، ۵۰ و یا ۱۰۰ است.**
## خروجی
+ پس از افزودن اسکناسها، مجموع کل دارایی خودپرداز (مجموع اسکناسهای درون آن) چاپ شود.
</details>
## نکات
+ هر یوزر پس از ثبتنام، موجودی اولیهی حسابش مقدار **۱۰۰ واحد** پول است.
+ در دستور `DEPOSIT`، چیزی به اسکناسهای داخل دستگاه اضافه **نمیشود**.
+ در دستور `WITHDRAW`، دستگاه خودپرداز در صورت پرداخت اسکناس، **کمترین تعداد اسکناس** را تحویل میدهد.
+ در ابتدا در دستگاه خودپرداز، از هر یک از اسکناسهای به ارزش ۱، ۵، ۱۰، ۵۰ و ۱۰۰، به تعداد **۱۰ عدد** داریم.
+ تضمین میشود فرمت تمامی `TIMESTAMP`ها به شکل `YYYY/MM/DD-hh:mm:ss` است که در آن `YYYY`، `MM`، `DD`، `hh`، `mm` و `ss` به ترتیب نشاندهندهی سال، ماه، روز، ساعت، دقیقه و ثانیهی عملیات است. همچنین تمامی `TIMESTAMP`ها مقداری معتبر دارند.
+ تمامی `USERNAME`ها، تنها شامل حروف کوچک انگلیسی و به طول حداکثر ۱۰ هستند.
+ در هر بخش، در صورتی که بیش از یک خطا رخ دهد، اولین خطا را به عنوان خروجی در نظر بگیرید.
+ دستورات به ترتیب TIMESTAMPها اجرا میشوند.
# زیرمسئلهها
| محدودیتها | نمره |
|:-:|:-:|
| در دستورات داده شده، تنها دستور `REGISTER` و `DEPOSIT` موجود است و همچنین، ترتیب `TIMESTAMP`ها در دستورات به صورت صعودی است (دستورات به ترتیب ورودی اجرا میشوند). | ۳۰ |
| دستور `WITHDRAW` و `ADD_BANKNOTE` در لیست دستورات وجود ندارد. | ۹۰ |
| دستور `TRANSFER` در لیست دستورات وجود ندارد. | ۹۰ |
| بدون محدودیت | ۹۰ |
# ورودی
ورودی شامل حداکثر **۲۰۰ خط** است. در خط اول، عدد $n$ آمده است که نشاندهندهی تعداد دستورات داده شده است. سپس در $n$ خط بعدی، در هر خط، یکی از دستورات معتبر آمده است.
**تضمین میشود فرمت ورودی دستورات، مانند فرمت گفته شده است و همچنین هیچ دو عملیاتی `TIMESTAMP` یکسان ندارند. (از جمله واریز به حساب در عملیات `TRANSFER`)**
# خروجی
به ازای هر دستور داده شده در ورودی، خروجی مناسب به آن را به ترتیب و در یک خط جداگانه چاپ کنید.
## ورودی نمونه ۱
```
5
REGISTER mohammad 1990/08/12-14:50:33
DEPOSIT mohammad 3000 1990/08/13-00:00:00
REGISTER abooeshagh 1990/09/15-19:00:00
DEPOSIT aboeshagh 100 1990/10/12-00:00:00
REGISTER mohammad 1990/10/18-00:00:00
```
## خروجی نمونه ۱
```
Registered Successfully
3100
Registered Successfully
No Such User Found!
Duplicate User!
```
## ورودی نمونه ۲
```
7
GET_BALANCE abooeshagh 1990/10/13-13:30:00
REGISTER abooeshagh 1990/09/15-19:00:00
GET_BALANCE aboeshagh 1990/10/12-00:00:00
REGISTER mohammad 1990/08/13-14:50:33
DEPOSIT mohammad 3000 1990/08/12-00:00:00
GET_BALANCE mohammad 2010/10/14-14:00:00
DEPOSIT mohammad 3000 1991/08/12-00:00:00
```
## خروجی نمونه ۲
```
90
Registered Successfully
No Such User Found!
Registered Successfully
No Such User Found!
3090
3100
```
## ورودی نمونه ۳
```
7
REGISTER mohammad 1990/10/13-13:30:00
WITHDRAW mammad 50 1990/10/14-13:30:00
WITHDRAW mohammad 201 1990/10/15-13:30:00
WITHDRAW mohammad 200 1990/10/16-13:30:00
WITHDRAW mohammad 4 1990/10/17-13:30:00
WITHDRAW mohammad 4 1990/10/18-13:30:00
WITHDRAW mohammad 4 1990/10/19-13:30:00
```
## خروجی نمونه ۳
```
Registered Successfully
No Such User Found!
Maximum Amount Exceeded!
Not Enough Fund!
96
92
Not Enough Banknotes!
```
## ورودی نمونه ۴
```
8
REGISTER mohammad 1990/10/13-13:30:00
REGISTER akbar 1990/10/14-13:30:00
TRANSFER mohammad asghar 4000 1990/10/15-13:30:00
TRANSFER mohammad akbar 101 1990/10/16-13:30:00
TRANSFER mohammad akbar 3001 1990/10/17-13:30:00
TRANSFER mohammad akbar 50 1990/10/18-13:30:00
GET_BALANCE akbar 1990/10/18-13:35:00
GET_BALANCE akbar 1990/10/19-13:30:00
```
## خروجی نمونه ۴
```
Registered Successfully
Registered Successfully
No Such User Found!
Not Enough Fund!
Maximum Amount Exceeded!
50
90
130
```
## ورودی نمونه ۵
```
6
REGISTER mohammad 1990/10/13-13:30:00
WITHDRAW mohammad 4 1990/10/14-13:30:00
WITHDRAW mohammad 4 1990/10/15-13:30:00
WITHDRAW mohammad 4 1990/10/16-13:30:00
ADD_BANKNOTE 1 10 1990/10/17-13:30:00
WITHDRAW mohammad 4 1990/10/18-13:30:00
```
## خروجی نمونه ۵
```
Registered Successfully
96
92
Not Enough Banknotes!
1662
88
```