+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
# مقدمه
در این سوال میخواهیم بخشی شبیه به سایت دیوار را طراحی کنیم. قرار است تعدادی کاربر در سایت ثبت نام کنند و هر کدام تعدادی آگهی روی این سایت قرار دهند. هر کاربر میتواند آگهی را به لیست علاقهمندیهایش اضافه کند. همچنین کاربری ممکن است بخواهد لیست آگهیهایی را که پست کرده یا به علاقهمندیهای خودش اضافه کرده را ببیند. به شما لیستی از دستورهای این سیستم داده میشود و از شما میخواهیم این دستورها را به درستی پاسخ دهید.
![توضیح تصویر](https://quera.org/qbox/view/QtIiZAPkct/E.jpg)
# دستورها
## فاز اول
### دستور `register`
فرم کلی این دستور به صورت `register <username>` است و به معنی این است که یک کاربر با نام کاربری `<username>` میخواهد در دیوار ثبت نام کند.
+ اگر این نام کاربری قبلاً توسط کاربر دیگری استفاده شده، خطای `invalid username` را چاپ کنید.
+ اگر خطایی وجود نداشت پیام `registered successfully` را چاپ کنید.
----------
### دستور `add_advertise`
فرم کلی این دستور به صورت `add_advertise <username> <title>` است و به معنی این است که کاربر `<username>` میخواهد آگهی با عنوان `<title>` را در دیوار منتشر کند.
+ اگر این نام کاربری قبلاً ثبت نام نکرده، خطای `invalid username` را چاپ کنید.
+ اگر این عنوان آگهی، برای آگهی دیگری استفاده شده، خطای `invalid title` را چاپ کنید.
+ اگر خطایی وجود نداشت پیام `posted successfully` را چاپ کنید.
----------
### دستور `rem_advertise`
فرم کلی این دستور به صورت `rem_advertise <username> <title>` است و به معنی این است که کاربر `<username>` میخواهد آگهی با عنوان `<title>` را که قبلاً در دیوار منتشر کرده را پاک کند.
+ اگر این نام کاربری قبلاً ثبت نام نکرده، خطای `invalid username` را چاپ کنید.
+ اگر این عنوان آگهی، روی هیچ آگهی قبلاً نیامده، خطای `invalid title` را چاپ کنید.
+ اگر این عنوان آگهی، برای این کاربر نیست، خطای `access denied` را چاپ کنید.
+ اگر خطایی وجود نداشت پیام `removed successfully` را چاپ کنید.
----------
### دستور `list_my_advertises`
فرم کلی این دستور به صورت `list_my_advertises <username>` است و به معنی این است که یک کاربر با نام کاربری `<username>` میخواهد لیست آگهیهایی که منتشر کرده را مشاهده کند.
+ اگر این نام کاربری قبلاً ثبت نام نکرده، خطای `invalid username` را چاپ کنید.
+ در غیر این صورت در یک خط عنوان همهی آگهیها را به ترتیب زمان انتشار در یک سطر با یک فاصله از هم چاپ کنید.
----------
## فاز دوم
### دستور `add_favorite`
فرم کلی این دستور به صورت `add_favorite <username> <title>` است و به معنی این است که کاربر `<username>` میخواهد آگهی با عنوان `<title>` را به لیست علاقهمندیهایش اضافه کند.
+ اگر این نام کاربری قبلاً ثبت نام نکرده، خطای `invalid username` را چاپ کنید.
+ اگر آگهی با این عنوان قبلاً منتشر نشده خطای `invalid title` را چاپ کنید.
+ اگر این آگهی با این عنوان قبلاً به لیست علاقهمندیها اضافه شده، خطای `already favorite` را چاپ کنید.
+ اگر خطایی وجود نداشت پیام `added successfully` را چاپ کنید.
----------
### دستور `rem_favorite`
فرم کلی این دستور به صورت `rem_favorite <username> <title>` است و به معنی این است که کاربر `<username>` میخواهد آگهی با عنوان `<title>` را از لیست علاقهمندیهایش حذف کند.
+ اگر این نام کاربری قبلاً ثبت نام نکرده، خطای `invalid username` را چاپ کنید.
+ اگر آگهی با این عنوان قبلاً منتشر نشده خطای `invalid title` را چاپ کنید.
+ اگر این آگهی با این عنوان اکنون در لیست علاقهمندیهایش نیست، خطای `already not favorite` را چاپ کنید.
+ اگر خطایی وجود نداشت پیام `removed successfully` را چاپ کنید.
----------
### دستور `list_favorite_advertises`
فرم کلی این دستور به صورت `list_favorite_advertises <username>` است و به معنی این است که یک کاربر با نام کاربری `<username>` میخواهد لیست آگهیهایی که به علاقهمندیهایش اضافه کرده را مشاهده کند.
+ اگر این نام کاربری قبلاً ثبت نام نکرده، خطای `invalid username` را چاپ کنید.
+ در غیر این صورت در یک خط عنوان همهی آگهیها را به ترتیب زمان اضافه شدن به علاقهمندی در یک سطر با یک فاصله از هم چاپ کنید.
----------
## فاز سوم
### دستور `add_advertise`
فرمت کلی این دستور به صورت `add_advertise <username> <title> [<tag>]` خواهد بود و به معنی این است که کاربر `<username>` میخواهد آگهی با عنوان `<title>` را با برچسب `<tag>` منتشر کند.
----------
### دستور `list_my_advertises`
فرم کلی این دستور به صورت `list_my_advertises <username> [<tag>]` است و به معنی این است که یک کاربر با نام کاربری `<username>` میخواهد لیست آگهیهایی که با برچسب `<tag>` منتشر کرده را مشاهده کند.
توجه کنید اگر مانند فاز اول، همچین کوئری داده شد ولی `<tag>` نداشت باید بدون در نظر گرفتن برچسبها همهی آگهیها را نشان دهید.
----------
### دستور `list_favorite_advertises`
فرم کلی این دستور به صورت `list_favorite_advertises <username> [<tag>]` است و به معنی این است که یک کاربر با نام کاربری `<username>` میخواهد لیست آگهیهایی که برچسب `<tag>` را دارند و به علاقهمندیهایش اضافه کرده را مشاهده کند.
توجه کنید اگر مانند فاز اول، همچین کوئری داده شد ولی `<tag>` نداشت باید بدون در نظر گرفتن برچسبها همهی آگهیها را نشان دهید.
----------
# نکات
+ بهجای `<username>` یک رشته که نشاندهندهی «نام کاربری» است، داده میشود.
+ بهجای `<title>` یک رشته که نشاندهندهی «عنوان آگهی» است، داده میشود.
+ هر رشته که در ورودی داده میشود. شامل ارقام، کاراکتر `_`، حروف کوچک یا بزرگ انگلیسی است و طول آن حداکثر ۲۰ است.
+ اگر آگهی از سایت دیوار حذف شده باشد باید از این لیست هم حذف شده باشد.
+ اگر لیستی را باید چاپ میکردید که خالی است، آن سطر را خالی بگذارید.
# ورودی
در سطر اول ورودی، عدد صحیح و مثبت $q$ داده میشود. در $q$ سطر بعدی، در هر سطر یک دستور داده میشود.
$$1 \leq q \leq 50$$
# خروجی
خروجی $q$ سطر دارد، در هر سطر پاسخ مناسب به هر دستور چاپ میشود.
# مثالها
## ورودی نمونه ۱
```
9
register user1
register user2
add_advertise user1 car
add_advertise user2 laptop
add_advertise user2 laptop
list_my_advertises user1
list_my_advertises user2
rem_advertise user2 phone
list_my_advertises user2
````
## خروجی نمونه ۱
```
registered successfully
registered successfully
posted successfully
posted successfully
invalid title
car
laptop
invalid title
laptop
````
## ورودی نمونه ۲
```
10
register user1
register user2
add_advertise user1 car
add_advertise user2 laptop
add_favorite user1 laptop
add_favorite user1 phone
add_favorite user2 laptop
rem_favorite user1 phone
list_favorite_advertises user1
list_favorite_advertises user2
````
## خروجی نمونه ۲
```
registered successfully
registered successfully
posted successfully
posted successfully
added successfully
invalid title
added successfully
invalid title
laptop
laptop
````
## ورودی نمونه ۳
```
9
register user1
register user2
add_advertise user1 car automotive
add_advertise user2 laptop electronics
add_advertise user2 phone electronics
add_advertise user1 laptop electronics
list_my_advertises user1 electronics
list_favorite_advertises user1
list_my_advertises user1
````
## خروجی نمونه ۳
```
registered successfully
registered successfully
posted successfully
posted successfully
posted successfully
invalid title
car
````
<details class="blue">
<summary>
**راهنمای تستها**
</summary>
برای کمک به دیباگ برنامهی شما، نام فایل تستی که به سوال کد داده شده، در اینجا آمده است.
```
1. sample1.in
2. sample2.in
3. sample3.in
4. 1_register.in
5. 1_add_advertise.in
6. 1_rem_advertise.in
7. 1_list_my_advertises.in
8. corner.in
9. corner_2.in
10. 2_add_favorite.in
11. 2_rem_favorite.in
12. 2_list_favorite_advertises.in
13. 3_add_advertise.in
14. 3_list_my_advertises.in
15. 3_list_favorite_advertises.in
```
</details>
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.