This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC optimize("O3,fast-math,inline")
#include <bits/stdc++.h>
using namespace std;
#define fr freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);
#define int long long
#define endl "\n"
const int mod = (int)(1e9+7);
#define all(x) x.begin(),x.end()
int mxn = 1e18;
int mnn = -mxn;
void outarr(int ans[],int n)
{
for (int i = 0; i < n; i++) cout << ans[i] << " \n"[i == n - 1];
}
int binpow(int base,int power)
{
if(power == 1) return base;
if(power == 0) return 1;
if(power&2)
{
int a;
a = binpow(base,(power-1)/2);
return a*a*base;
}
else
{
int a;
a = binpow(base,power/2);
return a*a;
}
}
int gcd(int a, int b)
{
if(b == 0) {
return a;
}
else {
return gcd(b, a % b);
}
}
int lcm(int a,int b)
{
return (a*b)/gcd(a,b);
}
int cvp = 0;
int n,k;
string s[1500][50];
void func(int i,int j)
{
if(j == k)
{
return;
}
if(i == n) return;
if(i == n-1)
{
cvp++;
cvp%=mod;
return;
}
for(int k1 = 0;k>k1;k1++)
{
string it = s[i+1][k1];
int i1 = 0;
int j1 = 0;
for(int l = 1;i+2>l;l++)
{
if(s[i][j][l-1] != it[l])
{
i1 = -1;
break;
}
i1++;
}
for(int l = 0;i+1>l;l++)
{
if(s[i][j][l] != it[l])
{
j1 = -1;
break;
}
j1++;
}
if(i1 == i+1 || j1 == i+1)
{
func(i+1,k1);
}
}
if(i == 0)
func(i,j+1);
}
void solve()
{
cin >> n >> k;
for(int i = 0;n>i;i++)
{
for(int j = 0;k>j;j++) cin >> s[i][j];
}
func(0,0);
cout << cvp << endl;
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
//fr
int t;
t=1;
//cin >> t;
while(t--) solve();
}
//template
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |