func main() var n: int :: cui@inputInt() var a: []int :: #[10]int var sum: int :: 0 var f2: bool :: true var f4: bool :: true var f84: bool :: true for i(1, 9) do a[i] :: cui@inputInt() if(a[i] <> 0) if(i % 2 <> 0) do f2 :: false end if if(i % 4 <> 0) do f4 :: false end if if(i <> 8 & i <> 4) do f84 :: false end if end if if(a[i] = n) const mod: int :: 1000000007 var ans: @ModInt :: (#@ModInt).init(10, mod) do ans.pow(n) do ans.sub(1) do ans.div(9) do ans.mul(i) do cui@print("\{ans}\n") ret end if do sum :+ a[i] * i end for if(n < 9) var b: []int :: #[n]int var j: int :: 0 for i(1, 9) for(1, a[i]) do b[j] :: i do j :+ 1 end for end for var ans: int :: f(b) while(@permutationNext(b), skip) do ans :: math@gcd(ans, f(b)) end while do cui@print("\{ans}\n") ret end if var ans: int :: 1 if(sum % 9 = 0) do ans :: 9 elif(sum % 3 = 0) do ans :: 3 end if if(f84) do ans :* 8 elif(f4) do ans :* 4 elif(f2) do ans :* 2 end if do cui@print("\{ans}\n") func f(b: []int): int var res: int :: 0 for i(0, ^b - 1) do res :* 10 do res :+ b[i] end for ret res end func end func func permutationNext(array: []int): bool var left: int :: ^array - 2 while(left >= 0 & array[left] >= array[left + 1]) do left :- 1 end while if(left < 0) ret false end if var right: int :: ^array - 1 while(array[left] >= array[right]) do right :- 1 end while var tmp: int :: array[left] do array[left] :: array[right] do array[right] :: tmp do left :+ 1 do right :: ^array - 1 while(left < right) do tmp :: array[left] do array[left] :: array[right] do array[right] :: tmp do left :+ 1 do right :- 1 end while ret true end func ; val, mod, a, b: 0 to 2 ^ 31. class ModInt() +var val: int var mod: int +*func toStr(): []char ret "\{me.val}" end func +func init(val: int, mod: int): ModInt do me.val :: val % mod do me.mod :: mod ret me end func +func add(a: int): ModInt do me.val :+ a if(me.val >= me.mod) do me.val :- me.mod end if ret me end func +func sub(a: int): ModInt if(me.val < a) do me.val :+ me.mod end if do me.val :- a ret me end func +func mul(a: int): ModInt do me.val :: me.val * a % me.mod ret me end func +func div(a: int): ModInt do me.val :: me.val * me.modPow(a, me.mod - 2) % me.mod ret me end func +func pow(a: int): ModInt do me.val :: me.modPow(me.val, a) ret me end func func modPow(a: int, b: int): int if(b = 0) ret 1 end if var res: int :: me.modPow(a, b / 2) do res :: res * res % me.mod if(b % 2 = 1) do res :: res * a % me.mod end if ret res end func end class