public static void Main()
var result = IsPerfect(input);
Console.WriteLine("IsPerfect({0}) = {1}", input, result);
var result2 = PerfectIndex(input2);
Console.WriteLine("PerfectIndex({0}) = {1}", input2, result2);
var result3 = PerfectIndexes(input3);
Console.WriteLine("PerfectIndexes({0}) = {1},{2}", input3, result3[0], result3[1]);
private static bool IsPerfect(string input)
for (int i = 0; i < input.Length/2; i++)
if (input[i] != input[input.Length - i - 1])
private static int PerfectIndex(string input)
var modifiedInput = new StringBuilder(input);
while (index < input.Length)
var removedChar = input[index];
modifiedInput.Remove(index, 1);
if (IsPerfect(modifiedInput.ToString()))
modifiedInput.Insert(index, removedChar);
private static int[] PerfectIndexes(string input)
var modifiedInput = new StringBuilder(input);
while (index < input.Length)
var removedChar = input[index];
modifiedInput.Remove(index, 1);
int perfectIndex = PerfectIndex(modifiedInput.ToString());
if (perfectIndex >= index)
return new int[]{index, perfectIndex};
modifiedInput.Insert(index, removedChar);