시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB64252353.488%

문제

달구의 프로그램은 $0$에서 $9$까지의 숫자로만 이루어진 코드를 비밀번호로 이용한다. 사용자의 보안을 위해, 달구의 프로그램은 길이 $N$의 비밀번호 $s$에 대해 $a_i = h(s_is_{i+1}\cdots s_{i+L-1})$로 해싱하여 만든 수열 $a_1$, $a_2$, $\cdots$, $a_{N-L+1}$을 파일에 저장한다.

이때, $s_is_{i+1}\cdots s_{i+L-1}$은 $s$의 $i$ 번째 숫자 부터 $i+L-1$ 번째 숫자까지를 이어 붙인 문자열이며, 어떤 숫자로만 이루어진 문자열 $t$에 대한 해시 함수 $h(t)$는 다음과 같다.

$$h(t) = \sum_{i=1}^{|t|}{t[i] \times 17^{(|t|-i)}} \pmod{10^9+7}$$

$t[i]$는 $t$의 $i$번째 문자이다. 문자 0, 1, 2, $\cdots$, 9는 각각 정수 $0$, $1$, $2$, $\cdots$, $9$ 로 대응된다.

모든 수열과 문자열의 인덱스는 $1$부터 시작한다.

이 방식이 안전하다고 생각하는 달구를 위해 코드를 복원해보자.

입력

첫째 줄에 정수 $N$과 $L$이 공백으로 구분되어 주어진다. ($1 \le N \le 100\,000$; $1 \le L \le \lfloor \displaystyle\frac{N}{2}\rfloor$)

둘째 줄에 수열 $a_1$, $a_2$, $\cdots$, $a_{N-L+1}$이 공백으로 구분되어 주어진다. ($0 \le a_i \lt 10^9+7$)

비밀번호를 복원할 수 있는 수열만 입력으로 주어진다.

출력

첫째 줄에 복원한 달구의 비밀번호를 출력한다.

복원 가능한 비밀번호가 여러 개 존재할 경우 사전순으로 가장 앞서는 비밀번호를 출력한다.

예제 입력 1

12 2
23 104 42 139 59 137 18 26 154 23 102

예제 출력 1

162838119160

예제 입력 2

4 2
37 58 123

예제 출력 2

2374

$s$=2374 인 경우, $a_1 = 17 \times 2 + 3 = 37$, $a_2=17 \times 3 + 7= 58$, $a_3=17\times 7 +4=123$ 으로, 입력에서 주어진 값과 같다. 또한 이는 사전순으로 가장 앞선 문자열이다.

W3sicHJvYmxlbV9pZCI6IjM0ODA1IiwicHJvYmxlbV9sYW5nIjoiMCIsInRpdGxlIjoiXHVjZjU0XHViNGRjIFx1YmNmNVx1YzZkMFx1ZDU1OFx1YWUzMCIsImRlc2NyaXB0aW9uIjoiPHA+XHViMmVjXHVhZDZjXHVjNzU4IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0MCAkMCRcdWM1ZDBcdWMxMWMgJDkkXHVhZTRjXHVjOWMwXHVjNzU4IFx1YzIyYlx1Yzc5MFx1Yjg1Y1x1YjljYyBcdWM3NzRcdWI4ZThcdWM1YjRcdWM5YzQgXHVjZjU0XHViNGRjXHViOTdjIFx1YmU0NFx1YmMwMFx1YmM4OFx1ZDYzOFx1Yjg1YyBcdWM3NzRcdWM2YTlcdWQ1NWNcdWIyZTQuIFx1YzBhY1x1YzZhOVx1Yzc5MFx1Yzc1OCBcdWJjZjRcdWM1NDhcdWM3NDQgXHVjNzA0XHVkNTc0LCBcdWIyZWNcdWFkNmNcdWM3NTggXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQwIFx1YWUzOFx1Yzc3NCAkTiRcdWM3NTggXHViZTQ0XHViYzAwXHViYzg4XHVkNjM4ICRzJFx1YzVkMCBcdWIzMDBcdWQ1NzQgJGFfaSA9IGgoc19pc197aSsxfVxcY2RvdHMgc197aStMLTF9KSRcdWI4NWMgXHVkNTc0XHVjMmYxXHVkNTU4XHVjNWVjIFx1YjljY1x1YjRlMCBcdWMyMThcdWM1ZjQgJGFfMSQsICRhXzIkLCAkXFxjZG90cyQsICRhX3tOLUwrMX0kXHVjNzQ0IFx1ZDMwY1x1Yzc3Y1x1YzVkMCBcdWM4MDBcdWM3YTVcdWQ1NWNcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1Yzc3NFx1YjU0YywgJHNfaXNfe2krMX1cXGNkb3RzIHNfe2krTC0xfSRcdWM3NDAgJHMkXHVjNzU4ICRpJCBcdWJjODhcdWM5ZjggXHVjMjJiXHVjNzkwIFx1YmQ4MFx1ZDEzMCAkaStMLTEkIFx1YmM4OFx1YzlmOCBcdWMyMmJcdWM3OTBcdWFlNGNcdWM5YzBcdWI5N2MgXHVjNzc0XHVjNWI0IFx1YmQ5OVx1Yzc3OCBcdWJiMzhcdWM3OTBcdWM1ZjRcdWM3NzRcdWJhNzAsIFx1YzViNFx1YjVhNCBcdWMyMmJcdWM3OTBcdWI4NWNcdWI5Y2MgXHVjNzc0XHViOGU4XHVjNWI0XHVjOWM0IFx1YmIzOFx1Yzc5MFx1YzVmNCAkdCRcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDU3NFx1YzJkYyBcdWQ1NjhcdWMyMTggJGgodCkkXHViMjk0IFx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWIyZTQuPFwvcD5cclxuXHJcbjxwPiQkaCh0KSA9IFxcc3VtX3tpPTF9Xnt8dHx9e3RbaV0gXFx0aW1lcyAxN157KHx0fC1pKX19IFxccG1vZHsxMF45Kzd9JCQ8XC9wPlxyXG5cclxuPHA+JHRbaV0kXHViMjk0ICR0JFx1Yzc1OCAkaSRcdWJjODhcdWM5ZjggXHViYjM4XHVjNzkwXHVjNzc0XHViMmU0LiBcdWJiMzhcdWM3OTAgPGNvZGU+MDxcL2NvZGU+LCA8Y29kZT4xPFwvY29kZT4sIDxjb2RlPjI8XC9jb2RlPiwgJFxcY2RvdHMkLCA8Y29kZT45PFwvY29kZT5cdWIyOTQgXHVhYzAxXHVhYzAxIFx1YzgxNVx1YzIxOCAkMCQsICQxJCwgJDIkLCAkXFxjZG90cyQsICQ5JCBcdWI4NWMgXHViMzAwXHVjNzUxXHViNDFjXHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWJhYThcdWI0ZTAgXHVjMjE4XHVjNWY0XHVhY2ZjIFx1YmIzOFx1Yzc5MFx1YzVmNFx1Yzc1OCBcdWM3NzhcdWIzNzFcdWMyYTRcdWIyOTQgJDEkXHViZDgwXHVkMTMwIFx1YzJkY1x1Yzc5MVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjNzc0IFx1YmMyOVx1YzJkZFx1Yzc3NCBcdWM1NDhcdWM4MDRcdWQ1NThcdWIyZTRcdWFjZTAgXHVjMGRkXHVhYzAxXHVkNTU4XHViMjk0IFx1YjJlY1x1YWQ2Y1x1Yjk3YyBcdWM3MDRcdWQ1NzQgXHVjZjU0XHViNGRjXHViOTdjIFx1YmNmNVx1YzZkMFx1ZDU3NFx1YmNmNFx1Yzc5MC48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlx1Y2NhYlx1YzlmOCBcdWM5MDRcdWM1ZDAgXHVjODE1XHVjMjE4ICROJFx1YWNmYyAkTCRcdWM3NzQgXHVhY2Y1XHViYzMxXHVjNzNjXHViODVjIFx1YWQ2Y1x1YmQ4NFx1YjQxOFx1YzViNCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuICgkMSBcXGxlIE4gXFxsZSAxMDBcXCwwMDAkOyAkMSBcXGxlIEwgXFxsZSBcXGxmbG9vciBcXGRpc3BsYXlzdHlsZVxcZnJhY3tOfXsyfVxccmZsb29yJCk8XC9wPlxyXG5cclxuPHA+XHViNDU4XHVjOWY4IFx1YzkwNFx1YzVkMCBcdWMyMThcdWM1ZjQgJGFfMSQsICRhXzIkLCAkXFxjZG90cyQsICRhX3tOLUwrMX0kXHVjNzc0IFx1YWNmNVx1YmMzMVx1YzczY1x1Yjg1YyBcdWFkNmNcdWJkODRcdWI0MThcdWM1YjQgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiAoJDAgXFxsZSBhX2kgXFxsdCAxMF45KzckKTxcL3A+XHJcblxyXG48cD5cdWJlNDRcdWJjMDBcdWJjODhcdWQ2MzhcdWI5N2MgXHViY2Y1XHVjNmQwXHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyOTQgXHVjMjE4XHVjNWY0XHViOWNjIFx1Yzc4NVx1YjgyNVx1YzczY1x1Yjg1YyBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+XHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMCBcdWJjZjVcdWM2ZDBcdWQ1NWMgXHViMmVjXHVhZDZjXHVjNzU4IFx1YmU0NFx1YmMwMFx1YmM4OFx1ZDYzOFx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YmNmNVx1YzZkMCBcdWFjMDBcdWIyYTVcdWQ1NWMgXHViZTQ0XHViYzAwXHViYzg4XHVkNjM4XHVhYzAwIFx1YzVlY1x1YjdlYyBcdWFjMWMgXHVjODc0XHVjN2FjXHVkNTYwIFx1YWNiZFx1YzZiMCBcdWMwYWNcdWM4MDRcdWMyMWNcdWM3M2NcdWI4NWMgXHVhYzAwXHVjN2E1IFx1YzU1ZVx1YzExY1x1YjI5NCBcdWJlNDRcdWJjMDBcdWJjODhcdWQ2MzhcdWI5N2MgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjEiLCJodG1sX3RpdGxlIjoiMCIsInByb2JsZW1fbGFuZ190Y29kZSI6IktvcmVhbiIsInNhbXBsZV9leHBsYWluXzIiOiI8cD4kcyQ9PGNvZGU+MjM3NDxcL2NvZGU+IFx1Yzc3OCBcdWFjYmRcdWM2YjAsICRhXzEgPSAxNyBcXHRpbWVzIDIgKyAzID0gMzckLCAkYV8yPTE3IFxcdGltZXMgMyArIDc9IDU4JCwgJGFfMz0xN1xcdGltZXMgNyArND0xMjMkIFx1YzczY1x1Yjg1YywgXHVjNzg1XHViODI1XHVjNWQwXHVjMTFjIFx1YzhmY1x1YzViNFx1YzljNCBcdWFjMTJcdWFjZmMgXHVhYzE5XHViMmU0LiBcdWI2MTBcdWQ1NWMgXHVjNzc0XHViMjk0IFx1YzBhY1x1YzgwNFx1YzIxY1x1YzczY1x1Yjg1YyBcdWFjMDBcdWM3YTUgXHVjNTVlXHVjMTIwIFx1YmIzOFx1Yzc5MFx1YzVmNFx1Yzc3NFx1YjJlNC4gPFwvcD5cclxuIn0seyJwcm9ibGVtX2lkIjoiMzQ4MDUiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJSZXN0b3JlIHRoZSBDb2RlIiwiZGVzY3JpcHRpb24iOiI8cD5EYWxndSYjMzk7cyBwcm9ncmFtIHVzZXMgYSBwYXNzd29yZCBtYWRlIHVwIG9mIGRpZ2l0cyBmcm9tICQwJCB0byAkOSQuIEZvciBzZWN1cml0eSwgdGhlIHByb2dyYW0gaGFzaGVzIHRoZSBsZW5ndGgtJE4kJm5ic3A7cGFzc3dvcmQgJHMkJm5ic3A7aW50byBhIHNlcXVlbmNlICRhXzEkLCAkYV8yJCwkXFxjZG90cyQsICRhX3tOJm1pbnVzO0wrMX0kLCB3aGVyZSBlYWNoICRhX2kkJm5ic3A7aXMgY29tcHV0ZWQgYXMgJGFfaSA9IGgoc19pc197aSsxfVxcY2RvdHMgc197aStMJm1pbnVzOzF9KSQsIGFuZCBzdG9yZXMgdGhpcyBzZXF1ZW5jZSBpbiBhIGZpbGUuPFwvcD5cclxuXHJcbjxwPkluIHRoaXMgY2FzZSwgJHNfaXNfe2krMX1cXGNkb3RzIHNfe2krTC0xfSQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGRpZ2l0cyBmcm9tIHRoZSAkaSQtdGggdG8gdGhlICQoaStMLTEpJC10aCBkaWdpdCBvZiAkcyQsIGFuZCB0aGUgaGFzaCBmdW5jdGlvbiAkaCh0KSQgZm9yIGEgZGlnaXQgc3RyaW5nICR0JCBpcyBkZWZpbmVkIGFzIGZvbGxvd3MuPFwvcD5cclxuXHJcbjxwPiQkaCh0KSA9IFxcc3VtX3tpPTF9Xnt8dHx9e3RbaV0gXFx0aW1lcyAxN157KHx0fC1pKX19IFxccG1vZHsxMF45Kzd9JCQ8XC9wPlxyXG5cclxuPHA+JHRbaV0kIGlzIHRoZSAkaSR0aCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyAkdCQuIFRoZSBjaGFyYWN0ZXJzIDxzcGFuIHN0eWxlPVwiY29sb3I6IzAwMDAwMDtcIj48Y29kZT4wPFwvY29kZT48XC9zcGFuPiwgPHNwYW4gc3R5bGU9XCJjb2xvcjojMDAwMDAwO1wiPjxjb2RlPjE8XC9jb2RlPjxcL3NwYW4+LCA8c3BhbiBzdHlsZT1cImNvbG9yOiMwMDAwMDA7XCI+PGNvZGU+MjxcL2NvZGU+PFwvc3Bhbj4sICRcXGNkb3RzJCwgPHNwYW4gc3R5bGU9XCJjb2xvcjojMDAwMDAwO1wiPjxjb2RlPjk8XC9jb2RlPjxcL3NwYW4+IGNvcnJlc3BvbmQgdG8gdGhlIGludGVnZXJzICQwJCwgJDEkLCAkMiQsICRcXGNkb3RzJCwgJDkkLCByZXNwZWN0aXZlbHkuPFwvcD5cclxuXHJcbjxwPkFsbCBpbmRpY2VzIG9mIHNlcXVlbmNlcyBhbmQgc3RyaW5ncyBzdGFydCBmcm9tICQxJC48XC9wPlxyXG5cclxuPHA+TGV0JiMzOTtzIHJlc3RvcmUgdGhlIGNvZGUgZm9yIERhbGd1LCB3aG8gYmVsaWV2ZXMgdGhpcyBtZXRob2QgaXMgc2VjdXJlLjxcL3A+XHJcbiIsImlucHV0IjoiPHA+VGhlIGZpcnN0IGxpbmUgY29udGFpbnMgdHdvIGludGVnZXJzLCAkTiQgYW5kICRMJCwgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuICgkMSBcXGxlIE4gXFxsZSAxMDAsMDAwJDsgJDEgXFxsZSBMIFxcbGUgXFxsZmxvb3IgTlwvMiBcXHJmbG9vciQpPFwvcD5cclxuXHJcbjxwPlRoZSBzZWNvbmQgbGluZSBjb250YWlucyB0aGUgc2VxdWVuY2UgJGFfMSQsICRhXzIkLCAkXFxjZG90cyQsICRhX3tOLUwrMX0kIHNlcGFyYXRlZCBieSBzcGFjZXMuICgkMCBcXGxlIGFfaSAmbHQ7IDEwXjkrNyQpPFwvcD5cclxuXHJcbjxwPk9ubHkgc2VxdWVuY2VzIGZyb20gd2hpY2ggdGhlIHBhc3N3b3JkIGNhbiBiZSByZXN0b3JlZCBhcmUgZ2l2ZW4gYXMgaW5wdXQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+UHJpbnQgdGhlIHJlc3RvcmVkIHBhc3N3b3JkIG9mIERhbGd1IG9uIHRoZSBmaXJzdCBsaW5lLjxcL3A+XHJcblxyXG48cD5JZiBtdWx0aXBsZSBwYXNzd29yZHMgY2FuIGJlIHJlc3RvcmVkLCBwcmludCB0aGUgb25lIHRoYXQgY29tZXMgZmlyc3QgaW4gbGV4aWNvZ3JhcGhpY2FsIG9yZGVyLjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjAiLCJodG1sX3RpdGxlIjoiMCIsInByb2JsZW1fbGFuZ190Y29kZSI6IkVuZ2xpc2giLCJzYW1wbGVfZXhwbGFpbl8yIjoiPHA+SWYgJHM9MjM3NCQsIHRoZW4gJGFfMSA9MTcgXFx0aW1lcyAyKzM9MzckLCAkYV8yID0gMTcgXFx0aW1lcyAzKzcgPSA1OCQsIGFuZCAkYV8zID0xNyBcXHRpbWVzIDcrND0xMjMkLiBUaGlzIG1hdGNoZXMgdGhlIGdpdmVuIGlucHV0IHZhbHVlcy4gQWxzbywgdGhpcyBpcyB0aGUgbGV4aWNvZ3JhcGhpY2FsbHkgc21hbGxlc3Qgc3RyaW5nLjxcL3A+XHJcbiJ9XQ==

출처

University > DGIST > 2025 DGIST 알고리즘 경진대회 D번