using System.Collections.Generic;
public static void Main(string[] args)
Console.Write("Enter the number of digits : ");
var numberOfDigits = Convert.ToInt32(Console.ReadLine().Trim());
Console.Write("Enter the $1 digits space separated in ascending order : ",numberOfDigits);
var digits = Console.ReadLine().Trim().Split(" ".ToCharArray()).Select(i => Convert.ToInt32(i)).ToList();
Console.Write("Enter output number's length : ");
var outputNumberLength = Convert.ToInt32(Console.ReadLine().Trim());
var result = FindPossibleNumbers(digits.OrderByDescending(i => i).ToList(), outputNumberLength);
Console.WriteLine(result.Count > 0 ? result[0] : -1);
static List<int> FindPossibleNumbers(List<int> digits, int length, string currentNumber = "")
List<int> result = new List<int>();
currentNumber = currentNumber == "" ? "0" : currentNumber;
int currentInt = Convert.ToInt32(currentNumber);
for (int i = 0, l = digits.Count; i < l; i++)
if ((Convert.ToInt32(currentNumber) * 10 + digits[i]) % 3 == 0 )
result.Add(Convert.ToInt32(currentNumber) * 10 + digits[i]);
var newDigits = digits.Select(j => j).ToList();
result = result.Concat( FindPossibleNumbers(newDigits, length - 1, (Convert.ToInt32(currentNumber) * 10 + digits[i]).ToString())).ToList();
return result.Where(i => !i.ToString().StartsWith("0")).ToList();