جایگشت پدربزرگ


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

پدر حنا برای هدیه تولد او، صندوقچه‌ی پدربزرگش را باز کرده‌است و تکه‌ کد زیر را به او داده‌است. (کد زیر یک شبه‌کد است و می‌توانید درباره شبه‌کد در این‌جا بخوانید.)

procedure old_little_code()
    p := the input array of size n
    s := an empty stack
    a := an array of size 2n
    counter = 1
    for i = 1 to n inclusive do:
        while s is not empty and p[s.top] < p[i] do:
            a[counter] = s.top
            counter += 1
            s.pop()
        end while
        s.push(i)
        a[counter] = s.top
        counter += 1
    end for
    while s is not empty do:
        a[counter] = s.top
        counter += 1
        s.pop()
    end while
    return a
end procedure
Plain text

در کنار این تکه‌ کد، کاغذی پیدا کرده و آن را نیز به حنا می‌دهد. روی کاغذ نوشته شده "به این تکه کد یک جایگشت از اعداد 11 تا nn را دادم و در خروجی اعداد a1,a2,,a2n a_1, a_2, \ldots, a_{2n}\ را گرفتم.". حنا قصد دارد جایگشتی که پدربزرگش به عنوان ورودی به تکه کد داده‌ بود را پیدا کند. به او کمک کنید تا تعداد جایگشت‌های مختلفی که می‌توانند جایگشت پدربزرگش باشند را پیدا کند.

ورودی🔗

در سطر اول عدد nn آمده‌است.

در سطر بعدی، اعداد a1,a2,,a2na_1, a_2, \ldots, a_{2n} به ترتیب آمده‌اند.

تضمین می‌شود که به ازای حداقل یک جایگشت، خروجی داده‌شده تولید می‌شود.

1n200000 1 \leq n \leq 200 \, 000 1ain 1 \leq a_i \leq n

خروجی🔗

در تنها سطر خروجی، باقی‌مانده‌ی تعداد جایگشت‌ها بر 109+710^9 + 7 را چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

2
1 2 2 1
Plain text

خروجی نمونه ۱🔗

1
Plain text

جایگشت پدربزرگ فقط می‌تواند {2,1}\{2, 1\} باشد.

ورودی نمونه ۲🔗

3
1 2 3 3 2 1
Plain text

خروجی نمونه ۲🔗

1
Plain text

جایگشت پدربزرگ فقط می‌تواند {3,2,1}\{3, 2, 1\} باشد.

ورودی نمونه ۳🔗

4
1 2 2 3 3 1 4 4
Plain text

خروجی نمونه ۳🔗

1
Plain text

جایگشت پدربزرگ فقط می‌تواند {3,1,2,4}\{3, 1, 2, 4\} باشد.

ورودی نمونه ۴🔗

5
1 2 2 3 3 4 5 5 4 1
Plain text

خروجی نمونه ۴🔗

3
Plain text
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.