public int addExpectedEdges(final Node node)
	{
		final OrdinaryCluster cl = node.getGtCluster();

		/*
		 * Intra-cluster edges
		 */
		final List<Long> intraClPartners =
			Sequences.binomialSequence(cl.getPIn(), cl.getNodeCount() - 1);
		for (final long index : intraClPartners)
		{
			// mind not to create self loops!
			final Node other = cl.getNode(index >= node.getGtClIndex() ? (int) index + 1
				: (int) index);
			this.addEdge(new Pair<Node>(node, other));
		}

		/*
		 * Inter-cluster edges
		 */
		final List<Long> interClPartners =
			Sequences.binomialSequence(this.getPOut(), this.getNodeCount() - cl.getNodeCount());
		int c = 0;
		int previousBorder = 0;
		for (final long index : interClPartners)
		{
			long corrected = index - previousBorder;

			AbstractCluster otherCluster = this.groundTruth.getCluster(c);
			while (corrected >= otherCluster.getNodeCount() || otherCluster.equals(cl))
			{
				if (!otherCluster.equals(cl))
				{
					previousBorder += otherCluster.getNodeCount();

					corrected -= otherCluster.getNodeCount();
				}

				++c;
				assert c < this.groundTruth.getClusterCount();
				otherCluster = this.groundTruth.getCluster(c);
			}

			assert 0 <= corrected && corrected < otherCluster.getNodeCount() : "idx: " + index;

			final Node other = otherCluster.getNode((int) corrected);

			assert !other.equals(node);

			this.addEdge(new Pair<Node>(node, other));
		}

		return node.getDegree();
	}