code: func (f *Flow) MergeDatasets1ShardTo1Step(inputs []*Dataset, output *Dataset) (step *Step) {
  	step = f.NewStep()
  	step.NetworkType = MergeTwoShardToOneShard
  	fromStepToDataset(step, output)
  	for _, input := range inputs {
  		fromDatasetToStep(input, step)
  	}
  
  	// setup the network
  	if output != nil {
  		for shardId, outShard := range output.Shards {
  			task := step.NewTask()
  			for _, input := range inputs {
  				fromDatasetShardToTask(input.GetShards()[shardId], task)
  			}
  			fromTaskToDatasetShard(task, outShard)
  		}
  	}
  	return
  }
docs: // All dataset should have the same number of shards.