digraph g {		"multiply()" [shape=box, rank=min];
	// Rank adjustment
	{ rank = same; "int result = 0"; "while (x > 0)"; "System.out.println(result)"; "return result"; }
	{ rank = same; "result += y"; "x--"; }
	// Control flow
	"multiply()" -> "int result = 0" [style=bold];
	"multiply()" -> "while (x > 0)" [style=bold];
	"multiply()" -> "System.out.println(result)" [style=bold];
	"multiply()" -> "return result" [style=bold];
	"while (x > 0)" -> "result += y" [style=bold];
	"while (x > 0)" -> "x--" [style=bold];
	// Data flow
	"int result = 0" -> "result += y" [color=red];
	"int result = 0" -> "System.out.println(result)" [color=red];
	"int result = 0" -> "return result" [color=red];
	"result += y" -> "result += y" [color=red];
	"result += y" -> "System.out.println(result)" [color=red];
	"result += y" -> "return result" [color=red];
	"x--" -> "x--" [color=red];
	"x--" -> "while (x > 0)" [color=red];
	// Order adjustment
	"int result = 0" -> "while (x > 0)" [style=invis];
	"while (x > 0)" -> "System.out.println(result)" [style=invis];
	"System.out.println(result)" -> "return result" [style=invis];
	"result += y" -> "x--" [style=invis];
}