using System;
using System.Collections.Generic;
using System.Diagnostics;
public class Program
{
private static string Test(int n, string s)
{
var res = "";
for (var q=0; q<n; ++q)
res += s;
return res;
}
public static void Main()
{
var res = new Dictionary<string, double>[10];
const int N = 1024;
var sw = new Stopwatch();
for (var n=0; n<res.Length; ++n)
{
res[n] = new Dictionary<string, double>();
foreach (var s in new string[] {"!", "!2", "!234", "!2345678"})
{
res[n][s] = 0;
for (var q=0; q<N; ++q)
{
sw.Restart();
Test(1 << n, s);
sw.Stop();
res[n][s] += sw.ElapsedTicks;
}
res[n][s] /= N;
}
}
for (var n=0; n<res.Length; ++n)
{
Console.Write("{0,2} {1,7} ", n, 1<<n);
foreach (var kvp in res[n])
Console.Write("{0,10:0.000} ", kvp.Value / 1000);
Console.WriteLine();
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwoKcHVibGljIGNsYXNzIFByb2dyYW0KewogIHByaXZhdGUgc3RhdGljIHN0cmluZyBUZXN0KGludCBuLCBzdHJpbmcgcykKICB7CiAgICB2YXIgcmVzID0gIiI7CiAgICAKICAgIGZvciAodmFyIHE9MDsgcTxuOyArK3EpCiAgICAgIHJlcyArPSBzOwogICAgICAKICAgIHJldHVybiByZXM7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICB7CiAgICB2YXIgcmVzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBkb3VibGU+WzEwXTsKICAgIGNvbnN0IGludCBOID0gMTAyNDsKICAgIHZhciBzdyA9IG5ldyBTdG9wd2F0Y2goKTsKICAgIAogICAgZm9yICh2YXIgbj0wOyBuPHJlcy5MZW5ndGg7ICsrbikKICAgIHsKICAgICAgcmVzW25dID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBkb3VibGU+KCk7CgogICAgICBmb3JlYWNoICh2YXIgcyBpbiBuZXcgc3RyaW5nW10geyIhIiwgIiEyIiwgIiEyMzQiLCAiITIzNDU2NzgifSkKICAgICAgewogICAgICAgIHJlc1tuXVtzXSA9IDA7CgogICAgICAgIGZvciAodmFyIHE9MDsgcTxOOyArK3EpCiAgICAgICAgewogICAgICAgICAgc3cuUmVzdGFydCgpOwogICAgICAgICAgVGVzdCgxIDw8IG4sIHMpOwogICAgICAgICAgc3cuU3RvcCgpOwogICAgICAgICAgcmVzW25dW3NdICs9IHN3LkVsYXBzZWRUaWNrczsKICAgICAgICB9CiAgICAKICAgICAgICByZXNbbl1bc10gLz0gTjsKICAgICAgfQogICAgfQogICAgCiAgICBmb3IgKHZhciBuPTA7IG48cmVzLkxlbmd0aDsgKytuKQogICAgewogICAgICBDb25zb2xlLldyaXRlKCJ7MCwyfSB7MSw3fSAiLCBuLCAxPDxuKTsKICAgICAgCiAgICAgIGZvcmVhY2ggKHZhciBrdnAgaW4gcmVzW25dKQogICAgICAgIENvbnNvbGUuV3JpdGUoInswLDEwOjAuMDAwfSAiLCBrdnAuVmFsdWUgLyAxMDAwKTsKICAgICAgICAKICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoKTsKICAgIH0KICB9Cn0=