/*
 * $ java-introcs GeneratorEvil 5 4 ab 121
 * bbab
 * aaaa
 * baaa
 * babb
 * babb
 * $ java-introcs GeneratorEvil 5 4 ab 121 +
 * aaaa
 * baaa
 * babb
 * babb
 * bbab
 * $ java-introcs GeneratorEvil 5 4 ab 121 -
 * bbab
 * babb
 * babb
 * baaa
 * aaaa
 * $ java-introcs GeneratorEvil 5 4 ab 121 Z
 * aaaa
 * bbab
 * baaa
 * babb
 * babb
 * $ 
 */

import java.util.Arrays;

public class GeneratorEvil {

    public static String randomString(int L, String alpha) {
	char[] a = new char[L];
	for (int i = 0; i < L; i++)  { 
	    int t = StdRandom.uniformInt(alpha.length());
	    a[i] = alpha.charAt(t);
	}
	return new String(a);
    }
    
    public static void main(String[] args) {
	int N = Integer.parseInt(args[0]);
	int L = Integer.parseInt(args[1]);
	String alpha = args[2];
	long seed = Long.parseLong(args[3]);
	StdRandom.setSeed(seed);
	
	String[] a = new String[N];
	for (int i = 0; i < N; i++) 
	    a[i] = randomString(L, alpha);

	if (args.length < 5) {
	    for (String s : a)
		StdOut.println(s);
	    System.exit(0);
	}
	
	if (args[4].equals("+")) {
	    Arrays.sort(a);
	    for (String s : a)
		StdOut.println(s);
	    System.exit(0);
	}

	if (args[4].equals("-")) {
	    Arrays.sort(a);
	    for (int i = 0; i < N; i++) 
		StdOut.println(a[N - 1 - i]);
	    System.exit(0);	    
	}

	if (args[4].equals("Z")) {
	    Arrays.sort(a);
	    int l = 0, r = N - 1, k = 0, f = 0;
	    while (k++ < N)
		switch (f) {
		case 0:
		    StdOut.println(a[l++]);
		    f = 1;
		    break;
		case 1:
		    StdOut.println(a[r--]);
		    f = 0;
		    break;
		}
	} else { // none of the previous options
	    for (String s : a)
		StdOut.println(s);
	}
    }

}
