digraph R {
  node [shape=rectangle];
  
  f1_A [label="f1(A)"];
  f2_A [label="f2(A)"];
  f3_A [label="f3(A)"];
  f1_B [label="f1(B)"];
  f2_B [label="f2(B)"];
  f3_B [label="f3(B)"];
  f1_C [label="f1(C)"];
  f2_C [label="f2(C)"];
  f3_C [label="f3(C)"];
  
  {rank=same f1_A}
  {rank=same f1_B f2_A}
  {rank=same f1_C f2_B f3_A}
  {rank=same f2_C f3_B}
  
  f1_B->f2_A [color=red arrowhead=none];
  f1_C->f2_B->f3_A [color=red arrowhead=none];
  f2_C->f3_B [color=red arrowhead=none];
  f1_A->f1_B->f1_C;
  f2_A->f2_B->f2_C;
  f3_A->f3_B->f3_C;
}
