אדם המשחק במשחקים המובילים לטלפון הנייד מתרגז מאוד יום אחד על המשחק שעליו לשחק בזמן שהוא מנסה לחתום על חוזה. המשחק מתנהל כך:
- יש מאגר קלפים הכולל את המספרים מ־$1$ עד $2N+K$.
- המשחק שולף $N$ קלפים בזה אחר זה מתוך מאגר זה (ללא החזרה, כלומר אי אפשר לשלוף אותו מספר פעמיים).
- לאחר הקלפים שנשלפו, השחקן מנחש אם הקלף הבא יהיה גבוה יותר או נמוך יותר.
מה שמרגיז את השחקן הוא שבגלל חוסר המזל שלו, אחרי מספר קטן מופיע שוב ושוב מספר קטן יותר, ואחרי מספר גדול מופיע שוב ושוב מספר גדול יותר. בעקבות זאת השחקן מבקש למנוע זאת באמצעות שינוי מנגנון האקראיות של המשחק. השינוי שלו מוסיף לשליפת הקלפים את שני הכללים הבאים:
- אם נשלף קלף שמספרו בין $1$ ל־$N$, מספרו של הקלף הבא שיישלף חייב להיות גדול ממש מ־$N$ ($>N$).
- אם נשלף קלף שמספרו בין $N+K+1$ ל־$2N+K$, מספרו של הקלף הבא שיישלף חייב להיות קטן ממש מ־$N+K+1$ ($<N+K+1$).
השחקן תוהה עד כמה שיבש את המשחק לאחר השינויים האלה. מידת השיבוש היא היחס בין מספר כל הרצפים השונים האפשריים של שליפת קלפים בגרסה ששונתה לבין מספר כל הרצפים האפשריים של שליפת קלפים בגרסה הרגילה. הוא מבקש מכם את היחס הזה מודולו $10^9+7$.
פרטי מימוש
עליכם לממש את הפונקציה הבאה:
int oyun(int N, int K)
- $N$ ו־$K$ הם מספרים שלמים הקובעים את מאגר הקלפים ואת מספר הקלפים שיש לשלוף, כפי שתואר בשאלה.
- הפונקציה צריכה להחזיר את היחס המבוקש.
- הפונקציה תיקרא פעם אחת בדיוק בכל בדיקה.
מגבלות
- $1\le N\le 10^6$.
- $1\le K\le 100$.
תת־משימות וניקוד
| תת־משימה | נקודות | מגבלות נוספות | תלויות |
|---|---|---|---|
| 1 | 10 | $1\le N,K\le 6$ | — |
| 2 | 18 | $1\le N\le 100$ | 1 |
| 3 | 6 | $1\le N\le 1000$ | 1, 2 |
| 4 | 47 | $1\le N\le 10^4$ | 1, 2, 3 |
| 5 | 19 | אין מגבלות נוספות | 1, 2, 3, 4 |
דוגמאות
oyun(2, 1)
הקריאה לפונקציה שלעיל צפויה להחזיר $600000005$.
המספרים שלנו הם $1,2,3,4,5$. נשלוף 2 קלפים. במצב הרגיל אפשר לשלוף את הקלפים ב־20 דרכים שונות. במשחק ששונה, אם הקלף הראשון הוא $1$, $2$, $4$ או $5$, קיימות 3 אפשרויות שונות לקלף השני; אם הוא $3$, קיימות 4 אפשרויות שונות לקלף השני. לכן קיימות בסך הכול 16 אפשרויות במשחק ששונה. $\frac{16}{20}=\frac45$. הסתברות זו שקולה ל־$600000005$ תחת המודולוס שלנו.
תוכנית בדיקה לדוגמה
תוכנית הבדיקה לדוגמה מצפה לכל מקרה בפורמט הבא:
$$N\ K$$
אם הפונקציה המבוקשת מחזירה מספר שלם בהצלחה, היא תדפיס את התוצאה $R$ בפורמט הבא:
$$R$$