Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #pragma comment(linker, "/stack:16777216")
- #include <string>
- #include <vector>
- #include <map>
- #include <list>
- #include <iterator>
- #include <set>
- #include <queue>
- #include <iostream>
- #include <sstream>
- #include <stack>
- #include <deque>
- #include <cmath>
- #include <memory.h>
- #include <cstdlib>
- #include <cstdio>
- #include <cctype>
- #include <algorithm>
- #include <utility>
- #include <time.h>
- using namespace std;
- #define FOR(i, a, b) for(int i = (a); i < (b); ++i)
- #define RFOR(i, b, a) for(int i = (b) - 1; i >= (a); --i)
- #define REP(i, N) FOR(i, 0, N)
- #define RREP(i, N) RFOR(i, N, 0)
- #define FILL(A,value) memset(A,value,sizeof(A))
- #define ALL(V) V.begin(), V.end()
- #define SZ(V) (int)V.size()
- #define PB push_back
- #define MP make_pair
- #define Pi 3.14159265358979
- typedef long long Int;
- typedef unsigned long long UINT;
- typedef vector <int> VI;
- typedef pair <int, int> PII;
- const int INF = 1000000000;
- const int MAX = 100007;
- const int MAX2 = 12;
- const int BASE = 1000000000;
- const int CNT = 317;
- #define MOD 1000000009
- int T;
- string A[3];
- char S[MAX];
- int C[28][28][28][3][3];
- int R[MAX][2][2];
- int main()
- {
- freopen("in.txt", "r", stdin);
- FOR (i,0,27)
- FOR (j,0,27)
- FOR (k,0,27)
- {
- int a = (i < j ? 0 : (i == j ? 1 : 2));
- int b = (j < k ? 0 : (j == k ? 1 : 2));
- FOR (mask,0,8)
- {
- int ii = i, jj = j, kk = k;
- if ((mask & 1) != 0)
- {
- if (i == 0)
- continue;
- ii = 27;
- }
- if ((mask & 2) != 0)
- {
- if (j == 0)
- continue;
- jj = 27;
- }
- if ((mask & 4) != 0)
- {
- if (k == 0)
- continue;
- kk = 27;
- }
- C[ii][jj][kk][a][b] ++;
- }
- }
- cout << int('?'+1) << endl;
- cin >> T;
- FOR (test,0,T)
- {
- FOR (i,0,3)
- {
- scanf("%s", S);
- int len = strlen(S);
- A[i] = "";
- FOR (j,0,len)
- A[i] += S[j];
- cout << A[i] << endl;
- }
- int len = 0;
- FOR (i,0,3)
- len = max(len, SZ(A[i]));
- FOR (i,0,3)
- FOR (j,0,SZ(A[i]))
- ++ A[i][j];
- while (SZ(A[0]) < len)
- A[0] += 'a';
- while (SZ(A[1]) < len)
- A[1] += 'a';
- while (SZ(A[2]) < len)
- A[2] += 'a';
- int n = SZ(A[0]);
- FOR (i,0,n+1)
- FOR (a,0,2)
- FOR (b,0,2)
- R[i][a][b] = 0;
- FOR (i,0,3)
- cout << A[i] << endl;
- R[0][1][1] = 1;
- FOR (i,0,n)
- FOR (a,0,2)
- FOR (b,0,2)
- {
- Int cur = R[i][a][b];
- if (cur == 0)
- continue;
- int ii = (A[0][i] == 64 ? 27 : A[0][i] - 'a');
- int jj = (A[1][i] == 64 ? 27 : A[1][i] - 'a');
- int kk = (A[2][i] == 64 ? 27 : A[2][i] - 'a');
- FOR (aa,0,3)
- FOR (bb,0,3)
- {
- if (a == 1 && aa == 2)
- continue;
- if (b == 1 && bb == 2)
- continue;
- int aaa = a;
- int bbb = a;
- if (aa == 0)
- aaa = 0;
- if (bb == 0)
- bbb = 0;
- R[i+1][aaa][bbb] += cur * C[ii][jj][kk][aa][bb] % MOD;
- //cout << A[0][i] << ' ' << ii << ' ' << jj << ' ' << kk << ' ' << aa << ' ' << bb << ' ' << C[ii][jj][kk][aa][bb] << endl;
- if (R[i+1][aaa][bbb] >= MOD)
- R[i+1][aaa][bbb] -= MOD;
- }
- }
- printf("%d\n", R[n][0][0]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement