digraph g {
    before [label = "", style=invis, width =0.001, height = 0.001];
    t [label = "try"];
    f [label = <x_in = x<br/>f()>];
    er [label = "error return"];
    nr [label = "normal return"];
    o [label = "x = x_out"];
    o1 [label = "x = x_out"];
    o2 [label = "x = x_out"];
    o3 [label = "x = x_out"];
    c1 [label = "catch (ExceptionA e)"]
    c2 [label = "catch (ExceptionB e)"]
    c3 [label = "catch (Exception e)"]
    l1 [label = "log(\"Type A\")"];
    l2 [label = "log(\"Type B\")"];
    l3 [label = "log(\"Exception\")"];
    after [label = "next"];
    after2 [label = "", style= invis, height = 0.0001, width = 0.0001]
    before -> t -> f -> er -> {c1, c2, c3};
    f -> nr -> o -> after;
    c1 -> o1 -> l1;
    c2 -> o2 -> l2;
    c3 -> o3 -> l3;
    {t nr c1 c2 c3} -> after [style = dashed, constraint = false];
    {l1 l2 l3} -> after -> after2;

    BEFORE [label = "", style = invis, width = 0.001, height = 0.001];
    T [label = "try"];
    F [label = "f()"];
    X_IN [label = "x_in = x"];
    X_OUT_NORMAL [label = "x = x_out"];
    X_OUT_1 [label = "x = x_out"];
    X_OUT_2 [label = "x = x_out"];
    X_OUT_3 [label = "x = x_out"];
    NORMAL_RET [label = "normal return"];
    ERROR_RET [label = "error return"];
    C1 [label = "catch (ExceptionA e)"]
    C2 [label = "catch (ExceptionB e)"]
    C3 [label = "catch (Exception e)"]
    L1 [label = "log(\"Type A\")"];
    L2 [label = "log(\"Type B\")"];
    L3 [label = "log(\"Exception\")"];
    NEXT [label = "next"];
    BEFORE -> NEXT;
    BEFORE -> T -> F -> {X_IN NORMAL_RET ERROR_RET}
    NORMAL_RET -> X_OUT_NORMAL
    ERROR_RET -> {C1 C2 C3}
    C1 -> {X_OUT_1 L1}
    C2 -> {X_OUT_2 L2}
    C3 -> {X_OUT_3 L3}
}