using System.Collections.Generic;
public static void Main()
string[] arr=new string[] {"baa", "abcd", "abca", "cab", "cad"};
AlienAlphaOrderQueue(arr);
public static void AlienAlphaOrderQueue(string[] arr)
Queue<char> previous = new Queue<char>();
Queue<char> current = new Queue<char>();
Dictionary<char, int> results = new Dictionary<char, int>();
results.Add(arr[0][0], 1);
foreach (var ch in arr[0].ToCharArray())
if (!results.ContainsKey(ch))
for (int i = 1; i < arr.Length; i++)
for (int j = 0; j < arr[i].Length; j++)
prev = previous.Dequeue();
current.Enqueue(arr[i][j]);
if (!results.ContainsKey(arr[i][j]))
results.Add(arr[i][j], max);
if (results[curr] < results[prev])
if (results[curr] > 1 && results[prev] > 1)
results[prev] = results[curr];
if (!results.ContainsKey(arr[i][j]))
results.Add(arr[i][j], max);
if(results[curr] != results[prev])
if (!results.ContainsKey(arr[i][j]))
results.Add(arr[i][j], max);
current = new Queue<char>();
var output = from item in results orderby item.Value ascending select item;
foreach (KeyValuePair<char,int> key in output)
Console.WriteLine(key.ToString());