import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int strNum = sc.nextInt();
		int strLen = sc.nextInt();
		sc.nextLine();
		String[] strs = new String[strNum];
		for(int i=0; i<strNum; i++) {
			strs[i] = sc.nextLine();
		}

		//ソートループ
		for(int i=0; i<strNum; i++) {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		}

		output(strs);

	}

	private static boolean minStr(int strLen, String strs, String strt) {
		for(int j=0; j<strLen; j++) {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		}
		return true;
	}

	private static void output(String[] strs) {
		for(int i=0; i<strs.length; i++) {
			System.out.print(strs[i]);
		}
		System.out.println();
	}

} import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int strNum = sc.nextInt();
		int strLen = sc.nextInt();
		sc.nextLine();
		String[] strs = new String[strNum];
		for(int i=0; i<strNum; i++) {
			strs[i] = sc.nextLine();
		}

		//ソートループ
		for(int i=0; i<strNum; i++) {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		}

		output(strs);

	}

	private static boolean minStr(int strLen, String strs, String strt) {
		for(int j=0; j<strLen; j++) {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		}
		return true;
	}

	private static void output(String[] strs) {
		for(int i=0; i<strs.length; i++) {
			System.out.print(strs[i]);
		}
		System.out.println();
	}

} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int strNum = sc.nextInt();
		int strLen = sc.nextInt();
		sc.nextLine();
		String[] strs = new String[strNum];
		for(int i=0; i<strNum; i++) {
			strs[i] = sc.nextLine();
		}

		//ソートループ
		for(int i=0; i<strNum; i++) {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		}

		output(strs);

	} main {
		Scanner sc = new Scanner(System.in);
		int strNum = sc.nextInt();
		int strLen = sc.nextInt();
		sc.nextLine();
		String[] strs = new String[strNum];
		for(int i=0; i<strNum; i++) {
			strs[i] = sc.nextLine();
		}

		//ソートループ
		for(int i=0; i<strNum; i++) {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		}

		output(strs);

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int strNum = sc.nextInt(); strNum sc.nextInt() sc.nextInt sc int strLen = sc.nextInt(); strLen sc.nextInt() sc.nextInt sc sc.nextLine() sc.nextLine sc String[] strs = new String[strNum]; strs new String[strNum] strNum for(int i=0; i<strNum; i++) {
			strs[i] = sc.nextLine();
		} int i=0; int i=0; i 0 i<strNum i strNum i++ i++ i {
			strs[i] = sc.nextLine();
		} {
			strs[i] = sc.nextLine();
		} strs[i] = sc.nextLine() strs[i] strs i sc.nextLine() sc.nextLine sc for(int i=0; i<strNum; i++) {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		} int i=0; int i=0; i 0 i<strNum i strNum i++ i++ i {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		} {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		} for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			} int j=i+1; int j=i+1; j i+1 i 1 j<strNum j strNum j++ j++ j {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			} {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			} if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				} !minStr(strLen,strs[i],strs[j]) minStr(strLen,strs[i],strs[j]) minStr strLen strs[i] strs i strs[j] strs j {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				} String tmp=strs[i]; tmp strs[i] strs i strs[i]=strs[j] strs[i] strs i strs[j] strs j strs[j]=tmp strs[j] strs j tmp output(strs) output strs String[] args args private static boolean minStr(int strLen, String strs, String strt) {
		for(int j=0; j<strLen; j++) {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		}
		return true;
	} minStr {
		for(int j=0; j<strLen; j++) {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		}
		return true;
	} for(int j=0; j<strLen; j++) {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		} int j=0; int j=0; j 0 j<strLen j strLen j++ j++ j {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		} {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		} char sChar = strs.charAt(j); sChar strs.charAt(j) strs.charAt strs j char tChar = strt.charAt(j); tChar strt.charAt(j) strt.charAt strt j if(sChar != tChar) {
				return sChar<tChar;
			} sChar != tChar sChar tChar {
				return sChar<tChar;
			} return sChar<tChar; sChar<tChar sChar tChar return true; true int strLen strLen String strs strs String strt strt private static void output(String[] strs) {
		for(int i=0; i<strs.length; i++) {
			System.out.print(strs[i]);
		}
		System.out.println();
	} output {
		for(int i=0; i<strs.length; i++) {
			System.out.print(strs[i]);
		}
		System.out.println();
	} for(int i=0; i<strs.length; i++) {
			System.out.print(strs[i]);
		} int i=0; int i=0; i 0 i<strs.length i strs.length strs strs.length i++ i++ i {
			System.out.print(strs[i]);
		} {
			System.out.print(strs[i]);
		} System.out.print(strs[i]) System.out.print System.out System System.out strs[i] strs i System.out.println() System.out.println System.out System System.out String[] strs strs public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int strNum = sc.nextInt();
		int strLen = sc.nextInt();
		sc.nextLine();
		String[] strs = new String[strNum];
		for(int i=0; i<strNum; i++) {
			strs[i] = sc.nextLine();
		}

		//ソートループ
		for(int i=0; i<strNum; i++) {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		}

		output(strs);

	}

	private static boolean minStr(int strLen, String strs, String strt) {
		for(int j=0; j<strLen; j++) {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		}
		return true;
	}

	private static void output(String[] strs) {
		for(int i=0; i<strs.length; i++) {
			System.out.print(strs[i]);
		}
		System.out.println();
	}

} public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int strNum = sc.nextInt();
		int strLen = sc.nextInt();
		sc.nextLine();
		String[] strs = new String[strNum];
		for(int i=0; i<strNum; i++) {
			strs[i] = sc.nextLine();
		}

		//ソートループ
		for(int i=0; i<strNum; i++) {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		}

		output(strs);

	}

	private static boolean minStr(int strLen, String strs, String strt) {
		for(int j=0; j<strLen; j++) {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		}
		return true;
	}

	private static void output(String[] strs) {
		for(int i=0; i<strs.length; i++) {
			System.out.print(strs[i]);
		}
		System.out.println();
	}

} Main
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int strNum = sc.nextInt();
		int strLen = sc.nextInt();
		sc.nextLine();
		String[] strs = new String[strNum];
		for(int i=0; i<strNum; i++) {
			strs[i] = sc.nextLine();
		}

		//ソートループ
		for(int i=0; i<strNum; i++) {
			for(int j=i+1; j<strNum; j++) {
				if(!minStr(strLen,strs[i],strs[j])) {
					String tmp=strs[i];
					strs[i]=strs[j];
					strs[j]=tmp;
				}
			}
		}

		output(strs);

	}

	private static boolean minStr(int strLen, String strs, String strt) {
		for(int j=0; j<strLen; j++) {
			char sChar = strs.charAt(j);
			char tChar = strt.charAt(j);
			if(sChar != tChar) {
				return sChar<tChar;
			}
		}
		return true;
	}

	private static void output(String[] strs) {
		for(int i=0; i<strs.length; i++) {
			System.out.print(strs[i]);
		}
		System.out.println();
	}

}
