public void SampleMatches( AbstractApi api, double percentage, int numQuestionsAnswers  )
	{
		WordDistributions dist = new WordDistributions();
		Hashtable<Integer,ArrayList<ClassElem>> bins = new Hashtable<Integer,ArrayList<ClassElem>>();
		
		for( PackageElem pack : api.Packages )
		{
			for( ClassElem klass : pack.Classes )
			{
				int length = dist.WordLength(klass.Name);
				if( !bins.containsKey(length) )
				{
					bins.put(length, new ArrayList<ClassElem>());
				}
				bins.get(length).add(klass);
			}
		}

		for( int b : bins.keySet() )
		{
			// Output histogram of bins
			int poolSize = NonZeroQuestionsOrAnswersClasses(bins.get(b)).size();
			System.out.println(b+" "+bins.get(b).size() + " " + poolSize);
		}
		
		for( int b : bins.keySet() )
		{
			List<ClassElem> classPool = NonZeroQuestionsOrAnswersClasses(bins.get(b));
			int numClassesToInspect = Math.min((int)( percentage * classPool.size()),numQuestionsAnswers);
			for( ClassElem klass : RandomItems(classPool, numClassesToInspect ))
			{
				List<String> inspectionPool = new ArrayList<String>();
				for( int answerId : RandomItems(klass.AnswerIds, numQuestionsAnswers))
				{
					int questionId = klass.AnswerIdToParentId.get(answerId);
					inspectionPool.add(b + " " + klass.Name + " " + AnswerUrl(questionId, answerId));
				}
				for( int questionId : RandomItems(klass.QuestionIds, numQuestionsAnswers ))
				{
					inspectionPool.add(b + " " + klass.Name + " " + QuestionUrl(questionId));
				}
				
				for( String inspection : RandomItems(inspectionPool, numQuestionsAnswers ))
				{
					System.out.println(inspection);
				}
			}
		}
	}