#include <iostream>
#include <cstring>
#include <string>
using namespace std;
//思路还是比较简单的,滑动窗口右边界带动左边界,因为右边界右移会使cnt_pair >= 原来的值,而左边界右移会使得cnt <= 原来的值,所以右边界使得cnt_pair >= k且左边界使得cnt_pair <= k就行了,但是代码实现还是有挺多需要注意的地方的
//注意cnt_pair可能超过int,需要long long
int main() {
long long n, k;
cin >> n >> k;
char* s = new char[n + 1];
scanf("%s", s);
//取-1是因为right++在处理s[right]之前,使用right = 0会导致s[0]被跳过
int left = 0, right = -1, cnt_1 = 0, cnt_0 = 0;
long long cnt_pair = 0;
bool flag = false;
while (right < n && !flag) {
while (right < n && cnt_pair < k) {
//先right++再处理s[right]是为了使得right恰好是使得cnt_pair < k的最小right,如果后right++再循环结束之后right--仍然要对边界n特判
right++;
if (right < n && s[right] == '1') {
cnt_1++;
cnt_pair += cnt_0;
} else if (right < n && s[right] == '0') cnt_0++;
}
if (cnt_pair < k) break;
while (left < n && cnt_pair > k) {
if (left < n && s[left] == '0') {
cnt_pair -= cnt_1;
cnt_0--;
} else if (left < n && s[left] == '1') cnt_1--;
left++;
}
if (cnt_pair == k) flag = true;
}
if (flag) cout << ++left << " " << ++right << endl;
else cout << -1 << endl;
}