public void SizeOfContribution(AbstractApi api, String outputPath)
	{
		List<ClassDocumentation> docs = DeserializeModel(api);

		Hashtable<Integer,Integer> Askers = new Hashtable<Integer,Integer>();
		Hashtable<Integer,Integer> Advisors = new Hashtable<Integer,Integer>();
		Hashtable<Integer,Integer> SelfAdvisors = new Hashtable<Integer,Integer>();
		
		for(ThreadElement thread : ClassIndex.getInstance().ThreadMap.values() )
		{
			IncByOne(Askers,thread.Question.UserId);
			
			for( AnswerElement ans : thread.Answers )
			{
				IncByOne(Advisors,ans.UserId);
			}
			
			if( thread.Answers.size() == 1 && thread.Question.UserId == thread.Answers.get(0).UserId )
			{
				// One is the loneliest number
				IncByOne(SelfAdvisors, thread.Question.UserId);
			}
		}
				
		//System.out.println(Askers.size() + " " + Advisors.size() + " " + All.size());
		HashSet<Integer> All = new HashSet<Integer>();
		All.addAll(Askers.keySet());
		All.addAll(Advisors.keySet());

		try
		{
			FileWriter fw = new FileWriter(outputPath);
			for( Integer userId : All)
			{
				int qContributions = Askers.containsKey(userId) ? Askers.get(userId) : 0;
				int aContributions = Advisors.containsKey(userId) ? Advisors.get(userId) : 0;
				int selfContributions = SelfAdvisors.containsKey(userId) ? SelfAdvisors.get(userId) : 0;

				fw.write(userId + "," + qContributions + "," + aContributions + "," + selfContributions + "\n");
			}
			fw.close();
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		
	}