public class WordArrange {
	public static void swap(int begin,int end,String[]arr){ //交换数组中的两个元素
		if(begin==end||arr[begin].equals(arr[end]))return;
		String temp=arr[begin];
		arr[begin]=arr[end];
		arr[end]=temp;
	}
	public static int getAllOrder(int begin,int end,String[]arr) throws Exception{ //获取全排列
		//boolean find=false;
		if(begin==end){
			if(check(arr)==1){
				throw new Exception(); 	/*******!出现后以异常方式跳出递归!*********/			
				}
		}
		else{
			for(int i=begin;i<=end;i++){
				swap(begin,i,arr);
				getAllOrder(begin+1,end,arr);
				swap(i,begin,arr);
			}
		}	
		return -1;
	}
	public static int check(String[]arr){  //在全排列中检查是否有符合要求的排列
		for(int i=0;i<arr.length-1;i++){
			if(arr[i].charAt(arr[i].length()-1)!=arr[i+1].charAt(0))return 0;
		}
		return 1;
	}
	public static int canArrangeWords(int num,String[]arr){
		//判断输入条件:输入数组长度是否合适、输入数组中每个字符串长度是否合适、输入字母是否是小写。。。。
		if(num<1||num>100||num!=arr.length)return 0;
		int []len=new int[num];
		char []head=new char[num];
		char []tail=new char[num];
	//	String []head_tail=new String[num];
		for(int i=0;i<num;i++){
			len[i]=arr[i].length();
			if(len[i]<2||len[i]>100)return 0;
			head[i]=arr[i].charAt(0);
			if(head[i]<'a'||head[i]>'z')return 0;
			tail[i]=arr[i].charAt(len[i]-1);
			if(tail[i]<'a'||tail[i]>'z')return 0;			
			//head_tail[i]=Character.toString(head[i])+Character.toString(tail[i]);
		}
		//采用全排列思想,并通过异常方式在找到符合条件的排列时跳出递归。
		try {
			return getAllOrder(0,num-1,arr);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			return 1;
		}
	}
	public static void main(String[]args){
		int num=5;
		String[]arr={"aa","cab","bc","cd","de"};
		System.out.print(canArrangeWords(num,arr));
	}
}