public List<String> fullJustify(String[] words, int L) {
		if(words == null || words.length == 0) return new ArrayList<String>();

		List<String> result = new ArrayList<String>();
		
		int lineCount = 0;
		List<String> line = new ArrayList<String>();
		
		for(int i=0; i<words.length; i++){
			
			lineCount += words[i].length();
			if(lineCount > L){
				result.add(process(line, L, lineCount - words[i].length() - 1));
				lineCount = 0;
				i--;
				line.clear();
			}else{
				line.add(words[i]);
				lineCount++;
			}	
		}
		if(line.size() != 0){
			String last = "";
			int lastCount = 0;
			for(int i=0; i<line.size(); i++){
				last += line.get(i);
				lastCount += line.get(i).length();
				if(lastCount < L){
					last += " ";
					lastCount++;
				}
			}
			result.add(addSpace(last, L-lastCount));
		}
		return result;
	}