private static void Main(string[] args)
{
int numTestCases = int.Parse(Console.ReadLine());
for (int testCaseNum = 0; testCaseNum < numTestCases; testCaseNum++)
{
var ints = GetSplitInts();
int cols = ints[0];
int rows = ints[1];
notComputable = false;
Dictionary<string, Node> nodesReference = new Dictionary<string, Node>();
List<Node> computedNodesList = new List<Node>();
List<Node> allNodes = new List<Node>();
for (int rowNumber = 1; rowNumber <= rows; rowNumber++)
{
string[] rowSplit = Console.ReadLine().Split(' ');
for (int colNumber = 1; colNumber <= cols; colNumber++)
{
string columName = GetColumnName(colNumber);
Node node = new Node();
node.Name = columName + rowNumber;
node.Value = rowSplit[colNumber - 1];
nodesReference.Add(node.Name, node);
if (node.IsComputed())
computedNodesList.Add(node);
allNodes.Add(node);
}
}
//add the adjacent nodes
foreach (Node node in computedNodesList)
{
var references = node.Value.Replace("=", "").Split('+');
foreach (var reference in references)
node.ReferencedNodes.Add(nodesReference[reference]);
}
Console.WriteLine((testCaseNum + 1) + ":");
//compute all the computed nodes
ComputeReferences(allNodes);
if (notComputable)
continue;
for (int i = 0; i < allNodes.Count; i++)
{
Console.Write(allNodes[i].Value + " ");
if (i % cols == cols - 1)
Console.WriteLine();
}
}
}