digraph R {
  node [shape=rectangle];
  
  {rank=same f1_A f1_B f1_C}
  {rank=same f2_A f2_B f2_C}
  {rank=same f3_A f3_B f3_C}
  
  f1_A [label="taskflow1 on token 1"];
  f2_A [label="taskflow1 on token 2"];
  f3_A [label="taskflow1 on token 3"];
  f1_B [label="taskflow2 on token 1"];
  f2_B [label="taskflow2 on token 2"];
  f3_B [label="taskflow2 on token 3"];
  f1_C [label="taskflow3 on token 1"];
  f2_C [label="taskflow3 on token 2"];
  f3_C [label="taskflow3 on token 3"];
  
 
  f1_A->f2_A->f3_A;
  f1_B->f2_B->f3_B;
  f1_C->f2_C->f3_C;
  f1_A->f1_B->f1_C;
  f2_A->f2_B->f2_C;
  f3_A->f3_B->f3_C;
}
