private Map<Integer,TreeSet<String>> readTable(BufferedReader words)
    {
	Map<Integer,TreeSet<String>> table = new HashMap<Integer,TreeSet<String>>();

	try {
	    for (String word = words.readLine(); 
		 word != null; 
		 word = words.readLine()) 
		{
		    // System.out.println("read one more " + word);
		    int key = word.length();
		    if (table.get(key) == null)
			table.put(key, new TreeSet<String>());
		    
		    table.get(key).add(word);
		}
	}
	catch (IOException e) {
	    System.out.println("Error during copy:" + e.getMessage());
	    System.exit(1); // Because of this, the "finally" won't be reached.
	                    // Worse, the "finally"s of the parent methods won't
	                    // be reached either. 
            // Never, ever, exit in catch statements. (Except in toy programs.)
	}
	finally {
	    try {
		words.close();
	    }
	    catch (IOException e) {
		System.out.println("Error closing files:" + e.getMessage());
		System.exit(1); 
	    }
	}

	return table;
    }