#include using namespace std; constexpr long long MOD = 1000000007; int POW3[100001]; int get_count_decimal_012(const string &s) { auto n = s.size(); if (n == 1) { if (s[0] == '1') { return 1; } else { return 2; } } auto cnt = 0LL; // f (1 until 10^(n-1))을 구하기 auto temp = 1LL; POW3[0] = temp; for (auto i = 1; i <= (n - 1); i++) { temp *= 3; temp %= MOD; POW3[i] = temp; } temp += MOD - 1; temp %= MOD; cnt += temp; cnt %= MOD; // f(10^(n-1) to int(s)) 까지 구하기 if (s[0] == '0') { // pass } else if (s[0] == '1') { // pass } else if (s[0] == '2') { long long tmpx = POW3[n - 1]; cnt += tmpx; cnt %= MOD; } else { long long tmpx = POW3[n - 1]; tmpx *= 2; cnt += tmpx; cnt %= MOD; return static_cast(cnt); } bool flag = false; for (int i = 1; i < n; i++) { auto ch = s[i]; if (ch == '0') { continue; } else if (ch == '1') { long long tmpx = POW3[n - i - 1]; cnt += tmpx; cnt %= MOD; } else if (ch == '2') { long long tmpx = 2 * POW3[n - i - 1]; cnt += tmpx; cnt %= MOD; } else { long long tmpx; tmpx = POW3[n - i]; cnt += tmpx; cnt %= MOD; flag = true; break; } } if (!flag) { cnt++; cnt %= MOD; } return static_cast(cnt); } int main() { ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int t; cin >> t; for (auto test_case = 1; test_case <= t; test_case++) { string s; cin >> s; cout << "Case #" << test_case << endl; cout << get_count_decimal_012(s) << endl; } }