+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
میخواهیم سامانهای برای مدیریت کالج طراحی کنیم. در یک کالج ۳ نوع کاربر باید قابل تعریف باشد. «عضو»، «مربی» و «مدیر». هر کدام از این افراد یک نام کاربری شناسایی میشوند.
بالاترین سطح دسترسی به ترتیب متعلق به «مدیر»، «مربی» و «عضو» است.
هر حساب کاربری بعد از ثبت نام در حالت «غیرفعال» است. زمانی یک حساب فعال میشود که یک «مدیر» آن را فعال کند. همچنین مدیران و مربیها نیاز دارند تا لیست کاربرهایی که «غیر فعال» هستند را داشته باشند.
از شما میخواهیم برنامهای بنویسید که درخواستهای زیر را برآورده کند.
<details class="blue">
<summary>
**عضویت در سامانه**
</summary>
فرمت کلی این دستورات به صورت زیر است:
```
REGISTER <USERNAME> <ROLE>
```
یعنی کاربری با نام `<USERNAME>` درخواست عضویت با نقش `<ROLE>` را دارد.
+ اگر کاربری با این نام کاربری **فعال یا غیرفعالی** (با هر نقشی) قبلاً ثبت نام کرده است پیام `INVALID USERNAME` را چاپ کنید.
+ اگر `<ROLE>`، هیچکدام از مقدارهای `ADMIN`، `MENTOR` یا `MEMBER` نبود، پیام `INVALID ROLE` را چاپ کنید.
+ در صورتی که هیچ کدام از اتفاقات بالا نیفتاد، `WAITING FOR ACCEPT` را چاپ کنید.
همواره کاربرها بعد از اضافه شدن «غیرفعال» هستند و باید منتظر فعال شدن بمانند.
</details>
<details class="blue">
<summary>
**تایید کردن عضویت**
</summary>
فرمت کلی این دستورات به صورت زیر است:
```
APPROVE <USERNAME1> <USERNAME2>
```
یعنی کاربر `<USERNAME1>` میخواهد کاربر `<USERNAME2>` را به حالت فعال تبدیل کند.
+ اگر کاربری با نام `<USERNAME1>` وجود ندارد، پیام `INVALID USERNAME` را چاپ کنید.
+ اگر کاربر `<USERNAME1>` فعال نیست، پیام `WAITING FOR ADMIN` را چاپ کنید.
+ اگر کاربر `<USERNAME1>` نقش `ADMIN` ندارد پیام `<USERNAME1> IS NOT ADMIN` را چاپ کنید.
+ اگر کاربری با نام `<USERNAME2>` وجود ندارد، پیام `INVALID USERNAME` را اعلام کنید.
+ اگر کاربر `<USERNAME2>` اکنون فعال است، پیام `<USERNAME2> IS ACTIVE` را چاپ کنید.
+ در صورتی که هیچ کدام از حالتهای بالا پیش نیامد کاربر `<USERNAME2>` را فعال کنید و پیام `<USERNAME2> ACTIVATED` را چاپ کنید.
</details>
<details class="blue">
<summary>
**رد کردن عضویت**
</summary>
```
REJECT <USERNAME1> <USERNAME2>
```
یعنی کاربر `<USERNAME1>` میخواهد کاربر `<USERNAME2>` را فعال نکند و درخواست عضویت او را پاک کند.
+ اگر کاربری با نام `<USERNAME1>` وجود ندارد، پیام `INVALID USERNAME` را چاپ کنید.
+ اگر کاربر `<USERNAME1>` فعال نیست، پیام `WAITING FOR ADMIN` را چاپ کنید.
+ اگر کاربر `<USERNAME1>` نقش `ADMIN` ندارد، پیام `USERNAME1> IS NOT ADMIN>` را چاپ کنید.
+ اگر کاربری با نام `<USERNAME2>` وجود ندارد، پیام `INVALID USERNAME` را اعلام کنید.
+ اگر کاربر `<USERNAME2>` اکنون فعال است، پیام `USERNAME1> IS ACTIVE>` را چاپ کنید.
+ در صورتی که هیچ کدام از حالتهای بالا پیش نیامد کاربر `<USERNAME2>` را از لیست انتظار حذف کنید و پیام `<USERNAME2> REJECTED` را چاپ کنید.
</details>
<details class="blue">
<summary>
**صف انتظار تایید**
</summary>
```
QUEUE <USERNAME>
```
+ اگر کاربری با نام `USERNAME` وجود نداشت، پیام `INVALID USERNAME` را چاپ کنید.
+ اگر کاربر غیرفعال بود، پیام `WAITING FOR ADMIN` را چاپ کنید.
+ اگر این کاربر نقش `MEMBER` داشت، پیام `NOT ENOUGH ACCESS` را چاپ کنید.
+ در صورتی که هیچ کدام از اتفاقات بالا رخ نداد، نام کاربری افرادی که درخواست عضویت دادند و هنوز «غیرفعال» هستند را به **ترتیب لغتنامهای** (در مقایسهی رشتهها ارزش حروف کوچک و بزرگ را یکسان در نظر بگیرید.) چاپ کنید. اگر هیچ کاربری این وضعیت را نداشت پیام `NO USER` را چاپ کنید.
</details>
<details class="blue">
<summary>
**تغییر نقش**
</summary>
```
CHANGEROLE <USERNAME1> <USERNAME2> <ROLE>
```
+ اگر کاربری با نام `<USERNAME1>` یا `<USERNAME2>` وجود ندارد، پیام `INVALID USERNAME` را چاپ کنید.
+ اگر کاربری با نام `<USERNAME1>` یا `<USERNAME2>` غیرفعال است، پیام `WAITING FOR ADMIN` را چاپ کنید.
+ اگر `<ROLE>` هیچ کدام از سه نقش گفته شده نبود، پیام `INVALID ROLE` را چاپ کنید.
+ اگر نقش `<USERNAME1>` پایینتر از `<USERNAME2>` است یا هردو نقش یکسانی دارند، `NOT ENOUGH ACCESS` را چاپ کنید.
+ اگر نقشی که `<USERNAME1>` میخواهد نقش `<USERNAME2>` را به آن تغییر بدهد، بالاتر از نقش خود اوست (مثلاً خود `MENTOR` است و میخواهد `<USERNAME2>` را به `ADMIN` تغییر دهد)، `INVALID CHANGEROLE` را چاپ کنید. (تغییر نقش زمانی مجاز است که `<USERNAME2>` به نقشی پایینتر یا هم تراز `<USERNAME1>` تغییر پیدا کند).
+ اگر نقش کاربر با این دسترسی تغییری نمیکند، پیام `ALREADY HAS THIS ROLE` چاپ کنید.
+ در صورتی که هیچ کدام از تغییرات بالا اتفاق نمیافتد، نقش `USERNAME2` را به `ROLE` تغییر دهید و پیام `ROLE CHANGED SUCCESSFULLY` را چاپ کنید.
</details>
<details class="blue">
<summary>
**وضعیت کاربر**
</summary>
```
STATUS <USERNAME>
```
نام کاربری، نقش و فعال بودن آن را با این الگو چاپ کنید:
اگر کاربری با نام `<USERNAME>` وجود ندارد، پیام `INVALID USERNAME` را چاپ کنید.
اگر کاربر فعال است:
`username: <USERNAME> role: <ROLE> active`
در غیر این صورت:
`username: <USERNAME> role: <ROLE> not active`
</details>
# نکات
+ توجه کنید در هر دستور باید فقط یک پیام چاپ کنید و اگر چند حالت باهم پیش آمد شرایطی که زودتر بیان شده بود، الویت دارد.
+ هر رشتهای که در ورودی داده میشود، شامل حروف کوچک و بزرگ انگلیسی به طول حداقل ۱ و حداکثر ۱۰ کاراکتر است.
+ در ابتدا یک کاربر با نام کاربری `ADMIN` و نقش `ADMIN` به صورت **فعال** در سامانه وجود دارد.
# ورودی
در سطر اول ورودی، عدد صحیح و مثبت $n$ داده میشود که تعداد دستورها را نشان میدهد.
$$1 \leq n \leq 10 \, 000$$
در $n$ سطر بعدی، در هر سطر یکی از دستورهایی که در بالا تعریف شده، داده میشود.
# خروجی
برای هر دستور، خروجی مورد نظر را چاپ کنید. تضمین میشود ورودیها طوری داده شود که مجموع کاراکتر خروجیها از $10^6$ بیشتر نشود.
# مثال
## ورودی نمونه ۱
```
21
REGISTER Amin ADMIN
REGISTER Mitra MENBER
REGISTER Mitra MEMBER
REGISTER Amin MEMBER
QUEUE ADMIN
APPROVE Amin Mitra
APPROVE ADMIN Mitra
APPROVE Mitra Amin
REGISTER Amir MEMBER
REJECT Amir Amin
APPROVE ADMIN Amin
APPROVE Mitra Amir
CHANGEROLE Amin Mitra MENTOR
STATUS Mitra
APPROVE Amin Amir
QUEUE Amir
REGISTER Mina MENTOR
CHANGEROLE Mitra Amir MENTOR
QUEUE Mitra
CHANGEROLE Mitra Amir MEMBER
STATUS Mina
```
## خروجی نمونه ۱
```
WAITING FOR ACCEPT
INVALID ROLE
WAITING FOR ACCEPT
INVALID USERNAME
Amin Mitra
WAITING FOR ADMIN
Mitra ACTIVATED
Mitra IS NOT ADMIN
WAITING FOR ACCEPT
WAITING FOR ADMIN
Amin ACTIVATED
Mitra IS NOT ADMIN
ROLE CHANGED SUCCESSFULLY
username: Mitra role: MENTOR active
Amir ACTIVATED
NOT ENOUGH ACCESS
WAITING FOR ACCEPT
ROLE CHANGED SUCCESSFULLY
Mina
NOT ENOUGH ACCESS
username: Mina role: MENTOR not active
```
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.