using System.Collections.Generic;
public static void Main()
string[] test1 = { "aba", "bbb", "bab" };
string[] test2 = { "ab", "bb", "aa" };
string[] test4 = {"zzzzab", "zzzzbb", "zzzzaa"};
string[] test8 = {"abc", "abx", "axx", "abx", "abc"};
c.stringsRearrangement(test4);
public bool stringsRearrangement(string[] inputArray) {
int[][] nums = new int[inputArray.Length][];
for(int i = 0; i < inputArray.Length; i++)
nums[i] = new int[inputArray[i].Length];
for(int j = 0; j < inputArray[i].Length; j++)
{nums[i][j] = Char.ConvertToUtf32(inputArray[i],j);}
List<int> counted = new List<int>();
List<string> orderList = new List<string>();
for(int i = 0; i < nums.Length; i++)
for(int j = 0; j < nums[i].Length; j++)
foreach(var v in nums[i+1])
if(!nums[i][j].Equals(v) && !counted.Contains(v))
Console.WriteLine("adding v:{0} to counted", Char.ConvertFromUtf32(v));
if(uniqueCount == 1 && !orderList.Contains(inputArray[i]))
orderList.Add(inputArray[i]);
Console.WriteLine("adding inputArray[i]:{0} to orderList", inputArray[i]);
if(!orderList.Contains(inputArray[i+1]))
{orderList.Add(inputArray[i+1]); Console.WriteLine("adding inputArray[i+1]:{0} to orderList", inputArray[i+1]);}
foreach(var v in nums[0])
if(!nums[i][j].Equals(v))
if(uniqueCount == 1 && !orderList.Contains(inputArray[i]))
orderList.Insert(0, inputArray[i]);
Console.WriteLine("adding inputArray[i]:{0} to front of orderList", inputArray[i]);
foreach(var v in orderList)