시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 67 35 28 57.143%

문제

람세스 2세가 전투에서 승리를 거두고 귀환했다. 그는 승리를 기리기 위해 웅장한 정원을 조성하기로 결심했다. 그래서 궁궐이 있는 Lubrr에서부터 시작해 Karnak 신전에 이르는 긴 길을 따라 식물을 일렬로 쭉 심을 예정이다. 심는 식물은 연꽃(L)과 파피루스(P) 이렇게 단 두 종류이다. 이들은 각각 이집트 북부와 남부의 상징이기 때문이다.

정원에는 그런 식으로 N개의 식물을 심는데, 종류별 식물 배치에 균형이 있어야 한다. 정원 내부의 어떤 연속적인 구간이라도 연꽃과 파피루스의 개수 차이가 2를 넘어서는 안 된다.

람세스가 세우고자 하는 정원은 L 아니면 P로 이루어진 문자열로 나타낼 수 있다. 예를 들어 N=5인 경우 위에서 제시한 균형을 갖춘 정원은 14가지가 있을 수 있다. (LLPLP, LLPPL, LPLLP, LPLPL, LPLPP, LPPLL, LPPLP, PLLPL, PLLPP, PLPLL, PLPLP, PLPPL, PPLLP, PPLPL)

그리고 특정 길이에 대해 균형을 갖춘 정원 식물 배치를 나타내는 문자열들은 알파벳 오름차순으로 나열하여 1부터 번호를 매길 수 있다. 가령 N=5의 경우, 12번에 해당하는 정원 문자열은 PLPPL이다.

길이가 N인 균형 잡힌 정원을 나타내는 어떤 문자열을 입력 받아 이것이 그 길이에 해당하는 전체 균형 잡힌 정원 문자열 중 오름차순으로 몇째 순서에 해당하는지 서열을 구하고, 이 값을 어떤 정수 M으로 나눈 나머지를 출력하는 프로그램을 작성하시오.

이 M이라는 수는 문제 풀이를 더 쉽게 해 주기 위해 있는 것으로, 다른 의미는 없음을 밝힌다.

입력

첫째 줄에는 심을 식물의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000)

둘째 줄에는 정수 M이 주어진다. (7 ≤ M ≤ 10,000,000)

셋째 줄에는 길이가 N이며, L(연꽃)과 P(파피루스)로 이루어진 균형 잡힌 정원을 나타내는 문자열이 주어진다.

출력

0 이상 M 미만의 정수 하나를 출력한다.

입력에서 주어진 정원 문자열의 오름차순 서열을 M으로 나눈 나머지의 값이다.

예제 입력 1

5
7
PLPPL

예제 출력 1

5

예제 입력 2

12
10000
LPLLPLPPLPLL

예제 출력 2

39

힌트

예제 입력에서 PLPPL은 사실 12번째에 있는 정원 배열이다. 그래서 12를 7로 나눈 나머지인 5를 정답으로 한다.

W3sicHJvYmxlbV9pZCI6IjU0NzAiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWFkZTBcdWQ2MTVcdWM3YTFcdWQ3OGMgXHVjOWMxXHVjMTIwXHVkNjE1IFx1YzgxNVx1YzZkMCIsImRlc2NyaXB0aW9uIjoiPHA+XHViNzhjXHVjMTM4XHVjMmE0IDJcdWMxMzhcdWFjMDAgXHVjODA0XHVkMjJjXHVjNWQwXHVjMTFjIFx1YzJiOVx1YjlhY1x1Yjk3YyBcdWFjNzBcdWI0NTBcdWFjZTAgXHVhZGMwXHVkNjU4XHVkNTg4XHViMmU0LiBcdWFkZjhcdWIyOTQgXHVjMmI5XHViOWFjXHViOTdjIFx1YWUzMFx1YjlhY1x1YWUzMCBcdWM3MDRcdWQ1NzQgXHVjNmM1XHVjN2E1XHVkNTVjIFx1YzgxNVx1YzZkMFx1Yzc0NCBcdWM4NzBcdWMxMzFcdWQ1NThcdWFlMzBcdWI4NWMgXHVhY2IwXHVjMmVjXHVkNTg4XHViMmU0LiBcdWFkZjhcdWI3OThcdWMxMWMgXHVhZDgxXHVhZDkwXHVjNzc0IFx1Yzc4OFx1YjI5NCBMdWJyclx1YzVkMFx1YzExY1x1YmQ4MFx1ZDEzMCBcdWMyZGNcdWM3OTFcdWQ1NzQgS2FybmFrIFx1YzJlMFx1YzgwNFx1YzVkMCBcdWM3NzRcdWI5NzRcdWIyOTQgXHVhZTM0IFx1YWUzOFx1Yzc0NCBcdWI1MzBcdWI3N2MgXHVjMmRkXHViYjNjXHVjNzQ0IFx1Yzc3Y1x1YjgyY1x1Yjg1YyBcdWNiNDkgXHVjMmVjXHVjNzQ0IFx1YzYwOFx1YzgxNVx1Yzc3NFx1YjJlNC4gXHVjMmVjXHViMjk0IFx1YzJkZFx1YmIzY1x1Yzc0MCBcdWM1ZjBcdWFmNDMoTClcdWFjZmMgXHVkMzBjXHVkNTNjXHViOGU4XHVjMmE0KFApIFx1Yzc3NFx1YjgwN1x1YWM4YyBcdWIyZTggXHViNDUwIFx1Yzg4NVx1Yjk1OFx1Yzc3NFx1YjJlNC4gXHVjNzc0XHViNGU0XHVjNzQwIFx1YWMwMVx1YWMwMSBcdWM3NzRcdWM5ZDFcdWQyYjggXHViZDgxXHViZDgwXHVjNjQwIFx1YjBhOFx1YmQ4MFx1Yzc1OCBcdWMwYzFcdWM5ZDVcdWM3NzRcdWFlMzAgXHViNTRjXHViYjM4XHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM4MTVcdWM2ZDBcdWM1ZDBcdWIyOTQgXHVhZGY4XHViN2YwIFx1YzJkZFx1YzczY1x1Yjg1YyBOXHVhYzFjXHVjNzU4IFx1YzJkZFx1YmIzY1x1Yzc0NCBcdWMyZWNcdWIyOTRcdWIzNzAsIFx1Yzg4NVx1Yjk1OFx1YmNjNCBcdWMyZGRcdWJiM2MgXHViYzMwXHVjZTU4XHVjNWQwIFx1YWRlMFx1ZDYxNVx1Yzc3NCBcdWM3ODhcdWM1YjRcdWM1N2MgXHVkNTVjXHViMmU0LiBcdWM4MTVcdWM2ZDAgXHViMGI0XHViZDgwXHVjNzU4IFx1YzViNFx1YjVhNCBcdWM1ZjBcdWMxOGRcdWM4MDFcdWM3NzgmbmJzcDtcdWFkNmNcdWFjMDRcdWM3NzRcdWI3N2NcdWIzYzQgXHVjNWYwXHVhZjQzXHVhY2ZjIFx1ZDMwY1x1ZDUzY1x1YjhlOFx1YzJhNFx1Yzc1OCBcdWFjMWNcdWMyMTggXHVjYzI4XHVjNzc0XHVhYzAwIDJcdWI5N2MgXHViMTE4XHVjNWI0XHVjMTFjXHViMjk0IFx1YzU0OCBcdWI0MWNcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1Yjc4Y1x1YzEzOFx1YzJhNFx1YWMwMCBcdWMxMzhcdWM2YjBcdWFjZTBcdWM3OTAgXHVkNTU4XHViMjk0IFx1YzgxNVx1YzZkMFx1Yzc0MCBMIFx1YzU0NFx1YjJjOFx1YmE3NCBQXHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzljNCBcdWJiMzhcdWM3OTBcdWM1ZjRcdWI4NWMgXHViMDk4XHVkMGMwXHViMGJjIFx1YzIxOCBcdWM3ODhcdWIyZTQuIFx1YzYwOFx1Yjk3YyBcdWI0ZTRcdWM1YjQgTj01XHVjNzc4IFx1YWNiZFx1YzZiMCBcdWM3MDRcdWM1ZDBcdWMxMWMgXHVjODFjXHVjMmRjXHVkNTVjIFx1YWRlMFx1ZDYxNVx1Yzc0NCBcdWFjMTZcdWNkOTggXHVjODE1XHVjNmQwXHVjNzQwIDE0XHVhYzAwXHVjOWMwXHVhYzAwIFx1Yzc4OFx1Yzc0NCBcdWMyMTggXHVjNzg4XHViMmU0LiAoTExQTFAsIExMUFBMLCBMUExMUCwgTFBMUEwsIExQTFBQLCBMUFBMTCwgTFBQTFAsIFBMTFBMLCBQTExQUCwgUExQTEwsIFBMUExQLCBQTFBQTCwgUFBMTFAsIFBQTFBMKTxcL3A+XHJcblxyXG48cD5cdWFkZjhcdWI5YWNcdWFjZTAgXHVkMmI5XHVjODE1IFx1YWUzOFx1Yzc3NFx1YzVkMCBcdWIzMDBcdWQ1NzQgXHVhZGUwXHVkNjE1XHVjNzQ0IFx1YWMxNlx1Y2Q5OCBcdWM4MTVcdWM2ZDAgXHVjMmRkXHViYjNjIFx1YmMzMFx1Y2U1OFx1Yjk3YyBcdWIwOThcdWQwYzBcdWIwYjRcdWIyOTQgXHViYjM4XHVjNzkwXHVjNWY0XHViNGU0XHVjNzQwIFx1YzU0Y1x1ZDMwY1x1YmNiMyBcdWM2MjRcdWI5ODRcdWNjMjhcdWMyMWNcdWM3M2NcdWI4NWMgXHViMDk4XHVjNWY0XHVkNTU4XHVjNWVjIDFcdWJkODBcdWQxMzAgXHViYzg4XHVkNjM4XHViOTdjIFx1YjllNFx1YWUzOCBcdWMyMTggXHVjNzg4XHViMmU0LiBcdWFjMDBcdWI4MzkgTj01XHVjNzU4IFx1YWNiZFx1YzZiMCwgMTJcdWJjODhcdWM1ZDAgXHVkNTc0XHViMmY5XHVkNTU4XHViMjk0IFx1YzgxNVx1YzZkMCBcdWJiMzhcdWM3OTBcdWM1ZjRcdWM3NDAgUExQUExcdWM3NzRcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YWUzOFx1Yzc3NFx1YWMwMCBOXHVjNzc4IFx1YWRlMFx1ZDYxNSBcdWM3YTFcdWQ3OGMgXHVjODE1XHVjNmQwXHVjNzQ0IFx1YjA5OFx1ZDBjMFx1YjBiNFx1YjI5NCBcdWM1YjRcdWI1YTQgXHViYjM4XHVjNzkwXHVjNWY0XHVjNzQ0IFx1Yzc4NVx1YjgyNSBcdWJjMWJcdWM1NDQgXHVjNzc0XHVhYzgzXHVjNzc0IFx1YWRmOCBcdWFlMzhcdWM3NzRcdWM1ZDAgXHVkNTc0XHViMmY5XHVkNTU4XHViMjk0IFx1YzgwNFx1Y2NiNCBcdWFkZTBcdWQ2MTUgXHVjN2ExXHVkNzhjIFx1YzgxNVx1YzZkMCBcdWJiMzhcdWM3OTBcdWM1ZjQgXHVjOTExIFx1YzYyNFx1Yjk4NFx1Y2MyOFx1YzIxY1x1YzczY1x1Yjg1YyBcdWJhODdcdWM5ZjggXHVjMjFjXHVjMTFjXHVjNWQwIFx1ZDU3NFx1YjJmOVx1ZDU1OFx1YjI5NFx1YzljMCBcdWMxMWNcdWM1ZjRcdWM3NDQgXHVhZDZjXHVkNTU4XHVhY2UwLCBcdWM3NzQgXHVhYzEyXHVjNzQ0IFx1YzViNFx1YjVhNCBcdWM4MTVcdWMyMTggTVx1YzczY1x1Yjg1YyBcdWIwOThcdWIyMDggXHViMDk4XHViYTM4XHVjOWMwXHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1OFx1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHVjNzkxXHVjMTMxXHVkNTU4XHVjMmRjXHVjNjI0LjxcL3A+XHJcblxyXG48cD5cdWM3NzQgTVx1Yzc3NFx1Yjc3Y1x1YjI5NCBcdWMyMThcdWIyOTQgXHViYjM4XHVjODFjIFx1ZDQ4MFx1Yzc3NFx1Yjk3YyBcdWIzNTQgXHVjMjdkXHVhYzhjIFx1ZDU3NCBcdWM4ZmNcdWFlMzAgXHVjNzA0XHVkNTc0IFx1Yzc4OFx1YjI5NCBcdWFjODNcdWM3M2NcdWI4NWMsIFx1YjJlNFx1Yjk3OCBcdWM3NThcdWJiZjhcdWIyOTQgXHVjNWM2XHVjNzRjXHVjNzQ0IFx1YmMxZFx1ZDc4Y1x1YjJlNC48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlx1Y2NhYlx1YzlmOCZuYnNwO1x1YzkwNFx1YzVkMFx1YjI5NCBcdWMyZWNcdWM3NDQgXHVjMmRkXHViYjNjXHVjNzU4IFx1YzIxOCBOXHVjNzc0IFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4mbmJzcDsoMSZuYnNwOyZsZTsgTiZuYnNwOyZsZTsgMSwwMDAsMDAwKTxcL3A+XHJcblxyXG48cD5cdWI0NThcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IFx1YzgxNVx1YzIxOCBNXHVjNzc0IFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4mbmJzcDsoNyAmbGU7IE0gJmxlOyAxMCwwMDAsMDAwKTxcL3A+XHJcblxyXG48cD5cdWMxNGJcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IFx1YWUzOFx1Yzc3NFx1YWMwMCBOXHVjNzc0XHViYTcwLCBMKFx1YzVmMFx1YWY0MylcdWFjZmMgUChcdWQzMGNcdWQ1M2NcdWI4ZThcdWMyYTQpXHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzljNCBcdWFkZTBcdWQ2MTUgXHVjN2ExXHVkNzhjIFx1YzgxNVx1YzZkMFx1Yzc0NCBcdWIwOThcdWQwYzBcdWIwYjRcdWIyOTQgXHViYjM4XHVjNzkwXHVjNWY0XHVjNzc0IFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC48XC9wPlxyXG4iLCJvdXRwdXQiOiI8cD4wIFx1Yzc3NFx1YzBjMSBNIFx1YmJmOFx1YjljY1x1Yzc1OCBcdWM4MTVcdWMyMTggXHVkNTU4XHViMDk4XHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjNzg1XHViODI1XHVjNWQwXHVjMTFjJm5ic3A7XHVjOGZjXHVjNWI0XHVjOWM0Jm5ic3A7XHVjODE1XHVjNmQwIFx1YmIzOFx1Yzc5MFx1YzVmNFx1Yzc1OCBcdWM2MjRcdWI5ODRcdWNjMjhcdWMyMWMgXHVjMTFjXHVjNWY0XHVjNzQ0IE1cdWM3M2NcdWI4NWMgXHViMDk4XHViMjA4IFx1YjA5OFx1YmEzOFx1YzljMFx1Yzc1OCBcdWFjMTJcdWM3NzRcdWIyZTQuPFwvcD5cclxuIiwiaGludCI6IjxwPlx1YzYwOFx1YzgxYyBcdWM3ODVcdWI4MjVcdWM1ZDBcdWMxMWMgUExQUExcdWM3NDAgXHVjMGFjXHVjMmU0IDEyXHViYzg4XHVjOWY4XHVjNWQwIFx1Yzc4OFx1YjI5NCBcdWM4MTVcdWM2ZDAgXHViYzMwXHVjNWY0XHVjNzc0XHViMmU0LiBcdWFkZjhcdWI3OThcdWMxMWMgMTJcdWI5N2MgN1x1Yjg1YyBcdWIwOThcdWIyMDggXHViMDk4XHViYTM4XHVjOWMwXHVjNzc4IDVcdWI5N2MgXHVjODE1XHViMmY1XHVjNzNjXHViODVjIFx1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJvcmlnaW5hbCI6IjAiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1ZDU1Y1x1YWQ2ZFx1YzViNCJ9LHsicHJvYmxlbV9pZCI6IjU0NzAiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJMaW5lYXIgR2FyZGVuIiwiZGVzY3JpcHRpb24iOiI8cD5SYW1lc3NlcyBJSSBoYXMganVzdCByZXR1cm5lZCB2aWN0b3Jpb3VzIGZyb20gYmF0dGxlLiBUbyBjb21tZW1vcmF0ZSBoaXMgdmljdG9yeSwgaGUgaGFzIGRlY2lkZWQgdG8gYnVpbGQgYSBtYWplc3RpYyBnYXJkZW4uIFRoZSBnYXJkZW4gd2lsbCBjb250YWluIGEgbG9uZyBsaW5lIG9mIHBsYW50cyB0aGF0IHdpbGwgcnVuIGFsbCB0aGUgd2F5IGZyb20gaGlzIHBhbGFjZSBhdCBMdXhvciB0byB0aGUgdGVtcGxlIG9mIEthcm5hay4gSXQgd2lsbCBjb25zaXN0IG9ubHkgb2YgbG90dXMgcGxhbnRzIGFuZCBwYXB5cnVzIHBsYW50cywgc2luY2UgdGhleSBzeW1ib2xpemUgVXBwZXIgYW5kIExvd2VyIEVneXB0IHJlc3BlY3RpdmVseS4gJm5ic3A7PFwvcD5cclxuXHJcbjxwPlRoZSBnYXJkZW4gbXVzdCBjb250YWluIGV4YWN0bHkgTiBwbGFudHMuIEFsc28sIGl0IG11c3QgYmUgYmFsYW5jZWQ6IGluIGFueSBjb250aWd1b3VzIHNlY3Rpb24gb2YgdGhlIGdhcmRlbiwgdGhlIG51bWJlcnMgb2YgbG90dXMgYW5kIHBhcHlydXMgcGxhbnRzIG11c3Qgbm90IGRpZmZlciBieSBtb3JlIHRoYW4gMi48XC9wPlxyXG5cclxuPHA+QSBnYXJkZW4gY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIG9mIGxldHRlcnMgJmxzcXVvO0wmcnNxdW87IChsb3R1cykgYW5kICZsc3F1bztQJnJzcXVvOyAocGFweXJ1cykuIEZvciBleGFtcGxlLCBmb3IgTj01IHRoZXJlIGFyZSAxNCBwb3NzaWJsZSBiYWxhbmNlZCBnYXJkZW5zLiBJbiBhbHBoYWJldGljYWwgb3JkZXIsIHRoZXNlIGFyZTogTExQTFAsIExMUFBMLCBMUExMUCwgTFBMUEwsIExQTFBQLCBMUFBMTCwgTFBQTFAsIFBMTFBMLCBQTExQUCwgUExQTEwsIFBMUExQLCBQTFBQTCwgUFBMTFAsIGFuZCBQUExQTC4gVGhlIHBvc3NpYmxlIGJhbGFuY2VkIGdhcmRlbnMgb2YgYSBjZXJ0YWluIGxlbmd0aCBjYW4gYmUgb3JkZXJlZCBhbHBoYWJldGljYWxseSwgYW5kIHRoZW4gbnVtYmVyZWQ8XC9wPlxyXG5cclxuPHA+c3RhcnRpbmcgZnJvbSAxLiBGb3IgZXhhbXBsZSwgZm9yIE49NSwgZ2FyZGVuIG51bWJlciAxMiBpcyB0aGUgZ2FyZGVuIFBMUFBMLiZuYnNwOzxiciBcLz5cclxuV3JpdGUgYSBwcm9ncmFtIHRoYXQsIGdpdmVuIHRoZSBudW1iZXIgb2YgcGxhbnRzIE4gYW5kIGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBhIGJhbGFuY2VkIGdhcmRlbiwgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIGFzc2lnbmVkIHRvIHRoaXMgZ2FyZGVuIG1vZHVsbyBzb21lIGdpdmVuIGludGVnZXIgTS48XC9wPlxyXG5cclxuPHA+Tm90ZSB0aGF0IGZvciBzb2x2aW5nIHRoZSB0YXNrLCB0aGUgdmFsdWUgb2YgTSBoYXMgbm8gaW1wb3J0YW5jZSBvdGhlciB0aGFuIHNpbXBsaWZ5aW5nIGNvbXB1dGF0aW9ucy48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPllvdXIgcHJvZ3JhbSBtdXN0IHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgdGhlIGZvbGxvd2luZyBkYXRhOjxcL3A+XHJcblxyXG48dWw+XHJcblx0PGxpPkxpbmUgMSBjb250YWlucyB0aGUgaW50ZWdlciBOLCB0aGUgbnVtYmVyIG9mIHBsYW50cyBpbiB0aGUgZ2FyZGVuLiAoMSAmbGU7IE4gJmxlOyAxLDAwMCwwMDApPFwvbGk+XHJcblx0PGxpPkxpbmUgMiBjb250YWlucyB0aGUgaW50ZWdlciBNLiAoNyAmbGU7IE0gJmxlOyAxMCwwMDAsMDAwKTxcL2xpPlxyXG5cdDxsaT5MaW5lIDMgY29udGFpbnMgYSBzdHJpbmcgb2YgTiBjaGFyYWN0ZXJzICZsc3F1bztMJnJzcXVvOyAobG90dXMpIG9yICZsc3F1bztQJnJzcXVvOyAocGFweXJ1cykgdGhhdCByZXByZXNlbnRzIGEgYmFsYW5jZWQgZ2FyZGVuLjxcL2xpPlxyXG48XC91bD5cclxuIiwib3V0cHV0IjoiPHA+WW91ciBwcm9ncmFtIG11c3Qgd3JpdGUgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBhIHNpbmdsZSBsaW5lIGNvbnRhaW5pbmcgb25lIGludGVnZXIgYmV0d2VlbiAwIGFuZCBNXHUyMDEwMSAoaW5jbHVzaXZlKSwgdGhlIG51bWJlciBhc3NpZ25lZCB0byB0aGUgZ2FyZGVuIGRlc2NyaWJlZCBpbiB0aGUgaW5wdXQsIG1vZHVsbyBNLjxcL3A+XHJcbiIsImhpbnQiOiI8cD5UaGUgYWN0dWFsIG51bWJlciBhc3NpZ25lZCB0byBQTFBQTCBpcyAxMi4gU28sIHRoZSBvdXRwdXQgaXMgMTIgbW9kdWxvIDcsIHdoaWNoIGlzIDUuPFwvcD5cclxuIiwib3JpZ2luYWwiOiIxIiwicHJvYmxlbV9sYW5nX2NvZGUiOiJcdWM2MDFcdWM1YjQifV0=

출처

Olympiad > International Olympiad in Informatics > IOI 2008 4번