#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cmath>

using namespace std;

void solve_sqrt_decomposition(int n, const string& s) {
    vector<int> fence1, fence2;
    
    // Определяме размера на блока като корен квадратен от N
    int block_size = max(1, (int)sqrt(n)); 
    
    for (int i = 0; i < n; i += block_size) {
        // Взимаме текущия блок (внимаваме за последния, който може да е по-къс)
        int current_len = min(block_size, n - i);
        string block = s.substr(i, current_len);
        
        int mid = current_len / 2;
        string s1 = block.substr(0, mid);
        string s2 = block.substr(mid);
        
        // DP таблица за подниза (Сложност O(K^2) където K = sqrt(N))
        vector<vector<int>> dp(s1.size() + 1, vector<int>(s2.size() + 1, 0));
        for (int x = 1; x <= s1.size(); ++x) {
            for (int y = 1; y <= s2.size(); ++y) {
                if (s1[x-1] == s2[y-1]) {
                    dp[x][y] = dp[x-1][y-1] + 1;
                } else {
                    dp[x][y] = max(dp[x-1][y], dp[x][y-1]);
                }
            }
        }
        
        // Възстановяване на индексите (Backtracking)
        vector<int> local_f1, local_f2;
        int x = s1.size();
        int y = s2.size();
        
        while (x > 0 && y > 0) {
            if (s1[x-1] == s2[y-1]) {
                local_f1.push_back(x - 1);
                local_f2.push_back(mid + y - 1);
                x--;
                y--;
            } else if (dp[x-1][y] > dp[x][y-1]) {
                x--;
            } else {
                y--;
            }
        }
        
        // Обръщаме ги, тъй като ги намерихме отзад напред
        reverse(local_f1.begin(), local_f1.end());
        reverse(local_f2.begin(), local_f2.end());
        
        // Добавяме локалните индекси към глобалните огради с отместване 'i'
        for (int idx : local_f1) fence1.push_back(i + idx);
        for (int idx : local_f2) fence2.push_back(i + idx);
    }

    int k = fence1.size();
    cout << k << "\n";
    for (int j = 0; j < k; ++j) cout << fence1[j] << (j == k - 1 ? "" : " ");
    cout << "\n";
    for (int j = 0; j < k; ++j) cout << fence2[j] << (j == k - 1 ? "" : " ");
    cout << "\n";
}

int main() {
    ios_base::sync_with_stdio(false); 
    cin.tie(NULL);
    
    int n, g;
    if (cin >> n >> g) {
        string s;
        cin >> s;
        solve_sqrt_decomposition(n, s);
    }
    
    return 0;
}
