private static ArrayList<WebNodePair> aggregate(List<List<WebNodePair>> pairs)
	{
		for (List<WebNodePair> list : pairs){
			Collections.sort(list, new WebNodePairComparatorById());
		}
		int n = pairs.size();
		if (n == 0)
			return new ArrayList<WebNodePair>();
		int sizeOfEach = pairs.get(0).size();

		// initialize
		ArrayList<WebNodePair> result = new ArrayList<WebNodePair>();
		for (int i = 0; i < sizeOfEach; i++)
		{
			result.add(new WebNodePair(pairs.get(0).get(i).id, 0));
		}

		for (int i = 0; i < n; i++)
		{
			List<WebNodePair> p = pairs.get(i);
			for (int j = 0; j < p.size(); j++)
			{
				double rank = p.get(j).rank;
				double rankNormalized = rank < 0.01 ? 100 * rank : (rank < 0.1 ? 10 * rank : rank);
				result.get(j).rank += rankNormalized;
			}
		}
		for (List<WebNodePair> list : pairs){
			Collections.sort(list, Collections.reverseOrder(new WebNodePairComparator()));
		}
		return result;
	}