using System;
using System.Linq.Expressions;
 
public class Test
{
	static T add<T>(T a, T b) {
    var p0 = Expression.Parameter(typeof(T),"a");
    var p1 = Expression.Parameter(typeof(T),"b");
    var ae = Expression.Add(p0, p1);
    var f = (Func<T,T,T>)Expression.Lambda(ae, p0, p1).Compile();
    return f(a, b);
}
 
	public static void Main()
	{
int a = 4, b = 6;
double x = 2.3, y = 5.2;
Console.WriteLine("Sum of two ints = {0}", add(a, b));
Console.WriteLine("Sum of two doubles = {0}", add(x, y));
    }
}
				dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucS5FeHByZXNzaW9uczsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXN0YXRpYyBUIGFkZDxUPihUIGEsIFQgYikgewogICAgdmFyIHAwID0gRXhwcmVzc2lvbi5QYXJhbWV0ZXIodHlwZW9mKFQpLCJhIik7CiAgICB2YXIgcDEgPSBFeHByZXNzaW9uLlBhcmFtZXRlcih0eXBlb2YoVCksImIiKTsKICAgIHZhciBhZSA9IEV4cHJlc3Npb24uQWRkKHAwLCBwMSk7CiAgICB2YXIgZiA9IChGdW5jPFQsVCxUPilFeHByZXNzaW9uLkxhbWJkYShhZSwgcDAsIHAxKS5Db21waWxlKCk7CiAgICByZXR1cm4gZihhLCBiKTsKfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CmludCBhID0gNCwgYiA9IDY7CmRvdWJsZSB4ID0gMi4zLCB5ID0gNS4yOwpDb25zb2xlLldyaXRlTGluZSgiU3VtIG9mIHR3byBpbnRzID0gezB9IiwgYWRkKGEsIGIpKTsKQ29uc29sZS5Xcml0ZUxpbmUoIlN1bSBvZiB0d28gZG91YmxlcyA9IHswfSIsIGFkZCh4LCB5KSk7CiAgICB9Cn0=