#include<iostream>#include<cstdio>#include<map>#include<cstring>#define mm(a) memset(a, 0, sizeof(a))usingnamespace std;typedeflonglong ll;constint state =14;constint mod =998244353;//矩阵快速幂struct mat{
ll m[state+1][state+1];}unit, a;voidinit(){mm(unit.m);for(int i =1; i < state; i++) unit.m[i][i]=1;}
mat matmul(mat a, mat b){
mat c;for(int i =1; i <= state; i++){for(int j =1; j <= state; j++){
ll tmp =0;for(int k =1; k <= state; k++){
tmp =(tmp+a.m[i][k]*b.m[k][j]%mod)%mod;}
c.m[i][j]= tmp;}}return c;}
mat quickpow(mat a, ll n){init();
mat ans = unit;while(n){if(n&1) ans =matmul(ans, a);
a =matmul(a, a);
n >>=1;}return ans;}// S=1和S=2编号
map<string,int> mp;voidinit_mp(){
mp["1"]=1; mp["2"]=2; mp["4"]=3; mp["6"]=4;
mp["16"]=5; mp["26"]=6; mp["41"]=7; mp["44"]=8;
mp["46"]=9; mp["61"]=10; mp["62"]=11; mp["64"]=12;
mp["66"]=13; mp["42"]=14;}intmain(){// 根据DP解法的状态转移矩阵获得
mat a ={{{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//0{0,0,0,1,0,0,0,0,0,0,0,0,0,0,0},//1{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0},//2{0,0,1,0,1,0,0,0,0,0,0,0,0,0,0},//3{0,0,0,1,1,0,0,0,0,0,0,0,0,0,0},//4{0,0,0,1,0,0,0,0,0,0,0,0,0,0,0},//5{0,0,0,0,0,1,0,0,0,0,0,0,0,0,0},//6{0,0,0,0,0,0,0,0,0,0,0,0,1,0,0},//7{0,0,0,0,0,0,0,0,0,0,0,1,0,0,0},//8{0,0,0,0,0,0,1,0,0,0,0,0,0,1,0},//9{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},//10{0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},//11{0,0,0,0,1,0,0,0,0,0,0,0,0,0,1},//12{0,0,0,0,0,0,0,0,0,1,0,0,0,0,0},//13{0,0,0,0,0,0,0,0,0,0,1,0,0,0,0}//14}};init_mp();int n;
string s;
cin >> n >> s;
mat ans =quickpow(a, n);int t = mp[s];
ll cnt = ans.m[t][1]%mod;
cout << cnt;return0;}
#include <iostream>#include <cstdio>#include <map>using namespace std;typedef long long ll;const int state = 14;const int mod = 998244353;//矩阵快速幂struct mat{ ll m[state+1][state+1];}unit, a;void init(){ for (int i = 1;