#include<bits/stdc++.h>
#define N 13
#define M 4100
#define db double
#define ll long long
#define ldb long double
#define ull unsigned long long
using namespace std;
const int h=3,ki=149,mo=998244353;
inline int mod(int x){return (x%mo+mo)%mo;}
inline int inc(int x,int k){x+=k;return x<mo?x:x-mo;}
inline int dec(int x,int k){x-=k;return x>=0?x:x+mo;}
int read()
{
char ch=0;int x=0,flag=1;
while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0',ch=getchar();}
return x*flag;
}
void write(int x)
{
if(!x)return (void)putchar(48);
if(x<0)putchar(45),x=-x;
int len=0,p[20];
while(x)p[++len]=x%10,x/=10;
for(int i=len;i>=1;i--)putchar(p[i]+48);
}
int len[M],mp[M][M];
int S[N][N],f[M][N],g[M][N],a[M][M],b[M][M],dp[N][M][M];
int main()
{
int n=read(),k=read();
/*
for(int i=1;i<=n*(n-1);i++)
{
int x=read(),y=read(),p=read(),q=read();
S[x][y]=1ll*p*inv(q)%mo;
}
*/
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)S[i][j]=rand();
for(int s=1;s<(1<<n);s++)
for(int x=1;x<=n;x++)
if(!((1<<(x-1))&s))
{
int tmp=1;
for(int i=1;i<=n;i++)
{
if(i==x)continue;
if((1<<(i-1))&s)tmp=1ll*tmp*dec(1,S[i][x])%mo;
}
f[s][x]=dec(1,tmp);g[s][x]=tmp;
}
//a[s][t]表示s向t连
//b[s][t]表示s向t全部不连
for(int s=1;s<(1<<n);s++)
{
int k=((1<<n)-1)-s;
for(int t=k;t;t=(t-1)&k)
if((s&t)==0)
{
a[s][t]=b[s][t]=1;
for(int i=1;i<=n;i++)if((1<<(i-1))&(t))
{
a[s][t]=1ll*a[s][t]*f[s][i]%mo;
b[s][t]=1ll*b[s][t]*g[s][i]%mo;
}
}
}
for(int t=1;t<(1<<n);t++)a[0][t]=b[0][t]=1;
int v=(1<<n)-1,ans=0;
dp[0][1][1]=1;
for(int s=0;s<(1<<n);s++)for(int t=s;t;t=(t-1)&s)mp[s][++len[s]]=t;
for(int i=0;i<k;i++)
{
for(int s=0;s<(1<<n);s++)
for(int j=1;j<=len[s];j++)
for(int t=1;t<=len[v^s];t++)
{
int &go=dp[i+1][s|mp[v^s][t]][mp[v^s][t]];
go+=1ll*dp[i][s][mp[s][j]]*a[mp[s][j]][mp[v^s][t]]%mo*b[s^mp[s][j]][mp[v^s][t]]%mo;
if(go>=mo)go-=mo;
}
for(int s=0;s<(1<<n);s++)ans=inc(ans,dp[i+1][v][s]);
}
write(ans);
return 0;
}