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.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class E {

	MyScanner in;
	PrintWriter out;
	final static String filename = "";

	class MyScanner {
		BufferedReader br;
		StringTokenizer st;

		public MyScanner() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			try {

				while (st == null || !st.hasMoreTokens())
					st = new StringTokenizer(br.readLine());
				return st.nextToken();

			} catch (IOException e) {
				e.printStackTrace();
				return null;
			}

		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

		void close() {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	int n;
	int[][] pr;
	String s;
	
	void print(int n, int k) {
		if (n == 0) return;
		print(pr[n][k], k - 1);
		for (int i = pr[n][k] + 1; i <= n; i++)
			out.print(s.charAt(i - 1));
		out.println();
	}

	void solve() throws IOException {
		int k = in.nextInt();
		int a = in.nextInt();
		int b = in.nextInt();
		s = in.next();
		int size = s.length();
		boolean[][] g = new boolean[size + 1][k + 1];
		pr = new int[size + 1][k + 1];
		g[0][0] = true;
		for (int i = 1; i <= size; i++) {
			for (int j = 1; j <= k; j++) {
				for (int l = a; l <= b; l++) {
					if (i - l < 0) continue;
					if (g[i - l][j - 1] == true) {
						g[i][j] = true;
						pr[i][j] = i - l;
					}
				}
			}
		}
		
		if (g[size][k] == false) {
			out.println("No solution");
			return;
		}
		
		print(size, k);
	}

	void run() {
		try {
			in = new MyScanner();
			out = new PrintWriter(System.out);

			solve();

			in.close();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(1);
		}

	}

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

}
