#include using namespace std; int main(){ cout << fixed << setprecision(20); int N; cin >> N; string S; cin >> S; S += '#'; vector dp_gameover_p(N, 0); vector dp_gameover_pe(N, 0); vector dp_goal_p(N, 0); vector dp_goal_pe(N, 0); dp_goal_p[N - 1] = 1; for (int i = N - 2; i >= 0; i--){ if (S[i] == '.'){ for (int j = i + 1; j <= i + 2; j++){ if (S[j] == '#'){ dp_gameover_p[i] += (double) 1 / 3; dp_gameover_pe[i] += (double) 1 / 3; } else { dp_gameover_p[i] += dp_gameover_p[j] / 3; dp_gameover_pe[i] += (dp_gameover_p[j] + dp_gameover_pe[j]) / 3; dp_goal_p[i] += dp_goal_p[j] / 3; dp_goal_pe[i] += (dp_goal_p[j] + dp_goal_pe[j]) / 3; } } } } vector dp(N, 0); vector dp2_p(N, 0), dp2_pe(N, 0); for (int i = N - 2; i >= 0; i--){ if (S[i] == '.'){ double gameover_p = dp_gameover_p[i] + (double) 1 / 3; double gameover_pe = dp_gameover_pe[i] + (double) 1 / 3; dp[i] += (1 / (1 - gameover_p) - 1) * (gameover_pe / gameover_p); dp[i] += dp_goal_pe[i] / (1 - gameover_p); for (int j = i + 1; j <= i + 2; j++){ if (S[j] == '.' && j < N - 1){ dp2_p[i] += (double) 1 / 9; dp2_pe[i] += (2 + dp[j]) / 9; dp2_p[i] += dp2_p[j] / 3; dp2_pe[i] += (dp2_p[j] + dp2_pe[j]) / 3; } } dp[i] += dp2_pe[i] / (1 - gameover_p); } } cout << dp[0] << endl; }