using System;

public class Bla {
	
	public static void BuildNode (ref string label)
	{
		string s = "a";
		label += s + s + s + s;
	}
	
	public static void BuildNode (ref string[] label)
	{
		string s = "a";
		int idx = 0;
		label[idx++] += s + s + s + s;
	}
	
	public static void BuildNode_B (ref object label)
	{
		string s = "b";
		label += s + s;
	}
	
	public static string BuildNode_C (ref string label)
	{
		string[] a = new string [2];
		int i = 0;
		a [0] = "a";
		string s = "b";

		a [i++] += label + s + s + s;
		return a [i - 1];
	}
	
	public static string BuildNode_D ()
	{
		System.Collections.ArrayList values = new System.Collections.ArrayList ();
		for (int i = 0; i < 6; i++)
			values.Add (i);
		string[] strs = new string [values.Count];
		int idx = 0;
		foreach (int val in values) {
			strs [idx] = "Value:";
			strs [idx++] += val.ToString ();
		}
		
		return strs [5];
	}
	
	public static void BuildNode_E (ref string[,] label)
	{
		string s = "a";
		int idx = 0;
		label = new string [1, 1];
		label[idx++, idx - 1] += s + s + s + s;
	}
	
	static bool Test_Object ()
	{
		int a = 0;
		object[] o_a = new string[] { "A" };
		o_a [a++] += "Z";
		if ((string) o_a [0] != "AZ")
			return false;
		
		a = 0;
		object[,] o_a2 = new string[,] { { "X" } };
		o_a2[a++, 0] += "Z";
		if ((string) o_a2 [0, 0] != "XZ")
			return false;
		
		return true;
	}
	
	static bool Test_Decimal ()
	{
		decimal[,] da = new decimal[,] { { 5, 6 } };
		da[0,0] = 6.7m;
		da[0,0] += 1.2m;
		
		if (da [0,0] != 7.9m)
			return false;
		
		return true;
	}
	
	public static int Main ()
	{
		String str = "test";
		
		BuildNode (ref str);
		Console.WriteLine (str);
		if (str != "testaaaa")
			return 1;
		
		object ostr = "test";
		BuildNode_B (ref ostr);
		Console.WriteLine (ostr);
		if (ostr.ToString () != "testbb")
			return 2;
		
		str = "test";
		string res = BuildNode_C (ref str);
		Console.WriteLine (str);
		if (str != "test")
			return 3;
		
		Console.WriteLine (res);
		if (res != "atestbbb")
			return 4;
		
		string[] sa = new string [1];
		BuildNode (ref sa);
		Console.WriteLine (sa [0]);
		if (sa [0] != "aaaa")
			return 5;
		
		str = BuildNode_D ();
		Console.WriteLine (str);
		if (str != "Value:5")
			return 6;
		
		string[,] sa2 = null;
		BuildNode_E (ref sa2);
		Console.WriteLine (sa2 [0, 0]);
		if (sa2 [0,0] != "aaaa")
			return 7;
		
		if (!Test_Object ())
			return 8;

		if (!Test_Decimal ())
			return 9;

		return 0;
	}
}