#include #include #include #include using namespace std; const int MAXN = 1750; int n; int a[30], b[30], c[30]; double dp1[30][15]; double digProb[15]; double memo[MAXN][(1<<10)+5]; double calcState(int ind, int mask) { if(ind>=MAXN-5) return 0; if(mask==(1<<10)-1) return 0; if(memo[ind][mask]==memo[ind][mask]) return memo[ind][mask]; double ans = 0; for(int d = 0;d<10;d++) { ans += digProb[d]*(1 + calcState(ind+1, mask|(1<> n; for(int i = 1;i<=n;i++) cin >> a[i]; for(int i = 1;i<=n;i++) cin >> b[i]; for(int i = 1;i<=n;i++) cin >> c[i]; dp1[0][1] = 1; for(int i = 1;i<=n;i++) { for(int prod = 0;prod<11;prod++) { for(int d = 0;d<=9;d++) { int newProd = (prod*(a[i]*d*d + b[i]*d + c[i]))%11; dp1[i][newProd] += dp1[i-1][prod]*0.1; } } } for(int prod = 0;prod<11;prod++) { digProb[prod%10] += dp1[n][prod]; } for(int i = 0;i<10;i++) { if(digProb[i]==0) { cout << "-1" << '\n'; return 0; } } memset(memo, -1, sizeof(memo)); cout << fixed << setprecision(8) << calcState(0, 0) << '\n'; }