digraph g {
	"f()" [shape=box, rank=min, style = filled];
		// Rank adjustment
		{ node [style=filled]
		{ rank = same; "int a = 1"; "while (a > 0)"; }
		"if (a > 10)"; break;
		}
		{ rank = same; "print(a)"; "a++"; }
		{ rank = max; "a++"; "print(a)"; }
		"a++" [style="filled,bold"];
		// Control flow
		"f()" -> "while (a > 0)";
		"f()" -> "int a = 1";
		"while (a > 0)" -> "if (a > 10)";
		"if (a > 10)" -> "break";
		"break" -> "print(a)";
		"break" -> "a++";
		"break" -> "while (a > 0)";
		// Data flow
		{ edge [color = red];
			"int a = 1" -> "while (a > 0)";
			"int a = 1" -> "if (a > 10)";
			"int a = 1" -> "print(a)";
			"a++" -> "a++";
			"a++" -> "while (a > 0)";
			"a++" -> "if (a > 10)";
			"a++" -> "print(a)" [constraint = true];
		}
	}