Anfisa the monkey learns to type. She is yet unfamiliar with the "space" key and can only type in lower-case Latin letters. Having typed for a fairly long line, Anfisa understood that it would be great to divide what she has written into k lines not shorter than a and not longer than b, for the text to resemble human speech more. Help Anfisa.

Input

The first line contains three integers k, a and b (1 ≤ k ≤ 200, 1 ≤ a ≤ b ≤ 200). The second line contains a sequence of lowercase Latin letters — the text typed by Anfisa. It is guaranteed that the given line is not empty and its length does not exceed 200 symbols.

Output

Print k lines, each of which contains no less than a and no more than b symbols — Anfisa's text divided into lines. It is not allowed to perform any changes in the text, such as: deleting or adding symbols, changing their order, etc. If the solution is not unique, print any of them. If there is no solution, print "No solution" (without quotes). 

Examples

Input

3 2 5
abrakadabra


Output

ab
rakad
abra


Input

4 1 2
abrakadabra


Output

No solution
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.*;

public class AnfisaTheMonkey implements Runnable {

    int k, a, b;
    int[][] path, memo;
    ArrayList<String> list;
    String s;

    public int go(int lines, int last) {
        if (lines == 0)
            if (last == s.length())
                return 1;
        if (lines < 0)
            return 0;
        if (memo[lines][last] != 2)
            return memo[lines][last];
        for (int i = last + a - 1; i < s.length() && i < last + b; i++)
            if (go(lines - 1, i + 1) == 1) {
                list.add(s.substring(last, i + 1));
                return memo[lines][last] = 1;
            }
        return memo[lines][last] = 0;
    }

    private void solve() throws IOException {
        k = nextInt();
        a = nextInt();
        b = nextInt();
        s = nextToken();
        memo = new int[k + 3][s.length() + 3];
        for (int[] m : memo)
            Arrays.fill(m, 2);
        list = new ArrayList<String>();
        go(k, 0);
        if (list.isEmpty()) {
            pl("No solution");
        } else {
            Collections.reverse(list);
            for (String s : list) pl(s);
        }
    }

    public static void main(String[] args) {
        new AnfisaTheMonkey().run();
    }

    BufferedReader reader;
    StringTokenizer tokenizer;
    PrintWriter writer;

    public void run() {
        try {
            reader = new BufferedReader(new BufferedReader(
                    new InputStreamReader(System.in)));
            writer = new PrintWriter(System.out);
            tokenizer = null;
            solve();
            reader.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    int nextInt() throws IOException {
        return Integer.parseInt(nextToken());
    }

    long nextLong() throws IOException {
        return Long.parseLong(nextToken());
    }

    double nextDouble() throws IOException {
        return Double.parseDouble(nextToken());
    }

    BigInteger nextBigInteger() throws IOException {
        return new BigInteger(nextToken());
    }

    String nextToken() throws IOException {
        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(reader.readLine());
        }
        return tokenizer.nextToken();
    }

    void p(Object... objects) {
        for (int i = 0; i < objects.length; i++) {
            if (i != 0)
                writer.print(' ');
            writer.print(objects[i]);
        }
    }

    void pl(Object... objects) {
        p(objects);
        writer.println();
    }

    int cc;

    void pf() {
        writer.printf("Case #%d: ", ++cc);
    }

}