#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;

void solve_randomized_target(int n, const string& s) {
    srand(time(NULL));
    int target_len = n / 10; // Търсим ограда с дължина 10% от N
    
    while (true) {
        // 1. Генерираме случайна мишена
        string target = "";
        for(int i = 0; i < target_len; ++i) {
            target += (rand() % 2 == 0) ? '0' : '1';
        }
        
        vector<int> f1, f2;
        int s_idx = 0;
        
        // 2. Търсим първото копие за ограда 1
        for(int t_idx = 0; t_idx < target_len && s_idx < n; ++s_idx) {
            if(s[s_idx] == target[t_idx]) {
                f1.push_back(s_idx);
                t_idx++;
            }
        }
        
        // 3. Търсим второто копие за ограда 2 (стартирайки от там, където спряхме)
        // Забележка: Това търси f2 след f1. Могат и да се преплитат, 
        // но за простота ги търсим последователно (disjoint).
        if(f1.size() == target_len) {
            for(int t_idx = 0; t_idx < target_len && s_idx < n; ++s_idx) {
                if(s[s_idx] == target[t_idx]) {
                    f2.push_back(s_idx);
                    t_idx++;
                }
            }
        }
        
        // 4. Ако и двете са намерени, приключваме успешно
        if(f2.size() == target_len) {
            int k = target_len;
            cout << k << "\n";
            for (int i = 0; i < k; ++i) cout << f1[i] << (i == k - 1 ? "" : " ");
            cout << "\n";
            for (int i = 0; i < k; ++i) cout << f2[i] << (i == k - 1 ? "" : " ");
            cout << "\n";
            break; 
        }
        // Ако не, цикълът се повтаря с нова случайна мишена
    }
}

int main(){
	int n, g; cin >> n >> g;
	string s; cin >> s;
	solve_randomized_target(n, s);
}
