Problem:
Problem A : ID

A大学ではIDの入力ミスが多発していた。

そこで、A大学は入力ミス防止のため新しいIDを発行することにした。

新しいIDには入力ミス防止のためにIDが正しいかどうかチェックする方法がある。

・全ての桁の数字の総和を求める。

・ただし、右端の桁を１番目として、偶数番目の桁の数字を２倍にする。

・２倍することによって数字が１０以上になった時、１の位の数字と１０の位の数字を加算した数字をその桁の数字とする。

・総和が１０で割り切れれば正しいID、そうでなければ間違いとする。

例として、53579というIDをチェックする。

全ての桁の数字の総和を求めるので、

5 + 3 + 5 + 7 + 9

ただし、偶数番目の桁の数字を２倍にするので、

5 + 6 + 5 + 14 + 9

２倍することによって数字が１０以上になった時、１の位の数字と１０の位の数字を加算した数字をその桁の数字とするので、

5 + 6 + 5 + (1 + 4) + 9

以上より、総和は30となる。30は10で割り切れるので、53579は正しいIDである。

B君はA大学の大学生であり、新しいIDを発行してもらったが、IDの一部の桁を忘れてしまった。

しかし、忘れてしまった部分にどんな数字が入るか、いくつか候補を絞ることに成功した。

あなたの仕事は、B君のIDの正しい組み合わせが何通りあるかを求めることである。

Input

入力は以下のフォーマットで与えられる。

n
ID
m
a0 a1 ... am-1

nはIDの桁の数である。

IDの各桁には0~9の数字または忘れた桁であるということを示す'*'という文字が入る。

mは'*'に入る数字の候補の数である。

aiは'*'に入る数字の候補である。

入力は以下の制約を満たす

1 ≤ n ≤ 100,000

1 ≤ m ≤ 10

0 ≤ ai ≤ 9

1 ≤ '*'の数 ≤ 7

Output

答えの値を１行に出力せよ

Sample Input 1

5
5*57*
2
3 9

Sample Output 1

1

Sample Input 2

15
2***9*2*6*1199*
9
0 1 2 3 4 6 7 8 9

Sample Output 2

478297

Solution in Ruby (judge verdict: Wrong Answer)

#num = "2***9*2*6*1199*"
#as = [0,1,2,3,4,6,7,8,9]
#num = "5*57*"
#as = [3,9]
num = "0***"
as = [2]

def isum(ns)
	Enumerator.new {|y|
		ns.each.each_with_index {|n,idx|
			if idx.odd?
				n2 = 2*n
				y << n2 % 10 + n2/10
			else
				y<< n
			end
		}
	}.inject(:+)
end

def holes(str)
	a = 0
	e = 0
	str.chars.each_with_index {|n,idx|
		if n == "*"
			a+=1
			if idx.odd?
				e+=1
			end
		end
	}
	[a,e]
end

def factrial(n)
	(1..n).inject(:*)
end

def count_perm(arr)
	h = Hash.new(0)
	l = arr.length
	arr.each {|x|
		h[x]+=1
	}
	ret = factrial(l)
	h.values.each {|x|
		ret /= factrial(x)
	}
	ret
end
nn = gets.to_i
num = gets[0,nn]
nn2 = gets.to_i
as = gets.chomp.split(" ").map(&:to_i).take(nn2)

all,even = holes num
sum = isum num.chars.map(&:to_i)
#p num.chars.map(&:to_i)
#p sum,all,even
p as.repeated_combination(all-even).map {|arr|
	as.repeated_combination(even).map {|arr2|
		s1 = arr.inject(:+) || 0
		s2 = arr2.map {|x|
		(2*x/10) + (2*x%10)
		}.inject(:+) || 0 
		if (sum+s1+s2) % 10 == 0
			(count_perm(arr)||1)*(count_perm(arr2)||1)
		else
			0
		end
	}
}.flatten.inject(:+)