#include<cstdio>#include<iostream>usingnamespace std;#define inf 0x3f3f3f3f int n, m;int dp[45][300][300];intget(int x ){int tot =0;for(int i =1;i <= n;i ++)
tot +=(( x &1)==0), x >>=1;return tot;}boolcheck(int x,int y,int z ){int a, b, c, d, e;for(int i =0;i < n;i ++){
a =(1<< i )& x;
b =(1<< i )& y;
c =(1<< i )& z;if( i ) d =(1<<( i -1))& y;else d =0;if( i < n -1) e =(1<<( i +1))& y;else e =0;if( a + b + c + d + e ==0)return0;}return1;}intmain(){scanf("%d %d",&n,&m );if( n > m )swap( n, m );int lim =1<< n;for(int i =1;i < lim;i ++)for(int j =0;j < lim;j ++)
dp[0][i][j]=-inf;for(int p =1;p <= m;p ++)for(int i =0;i < lim;i ++)for(int j =0;j < lim;j ++)for(int k =0;k < lim;k ++)if(check( i, j, k ))
dp[p][j][k]=max( dp[p][j][k], dp[p -1][i][j]+get( j ));int ans =0;for(int i =0;i < lim;i ++)
ans =max( ans, dp[m][i][0]);printf("%d", ans );return0;}
#include<cstdio>#include<vector>#include<iostream>usingnamespace std;
string mp[105]={" ","H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm"};
vector <int> ans;int n, k;bool flag;int a[20], t[20];bool vis[105][150000];intid( string s ){for(int i =1;i <=100;i ++)if( mp[i]== s )return i;}voidprint(){int sum =0, cnt =0;for(int i =0;i < ans.size();i ++){
sum += ans[i];
cout << mp[ans[i]];if( sum == t[cnt]){printf("->");
cout << mp[t[cnt]];
cnt ++; sum =0;printf("\n");}elseprintf("+");}exit(0);}voiddfs(int cnt,int sum,int s ){if( sum == t[cnt]){if( cnt == k ){
flag =1;printf("YES\n");print();}elsedfs( cnt +1,0, s );}if( vis[cnt][s])return;if( sum > t[cnt])return;for(int i =0;i < n &&(! flag );i ++){if((1<< i )& s )continue;else{
ans.push_back( a[i]);dfs( cnt, sum + a[i], s |(1<< i ));
ans.pop_back();}}
vis[cnt][s]=1;}intmain(){scanf("%d %d",&n,&k );for(int i =0;i < n;i ++){
string ch;
cin >> ch;
a[i]=id( ch );}for(int i =0;i < k;i ++){
string ch;
cin >> ch;
t[i]=id( ch );}dfs(0,0,0);printf("NO");return0;}
#include<cstdio>#define mod 1000000007constint lim =1<<20;int n, ans;int a[100];char s[100];int dp[100][lim +10];intmain(){scanf("%d %s",&n, s );for(int i =0;i < n;i ++)
a[i]= s[i]-'0';for(int i =0;i < n;i ++){
dp[i][0]=1;for(int k =0;k < lim;k ++){if(! dp[i][k])continue;for(int j = i, tot = a[i];j < n && tot <=20;j ++, tot =( tot <<1)+ a[j])if( tot )
dp[j +1][k |(1<<( tot -1))]=( dp[j +1][k |(1<<( tot -1))]+ dp[i][k])% mod;}}for(int i =0;i <= n;i ++)for(int j =1;j <=20;j ++)
ans =( ans + dp[i][(1<< j )-1])% mod;printf("%d", ans );return0;}
#include<cstdio>#include<vector>#include<cstring>usingnamespace std;
vector <int> g[10];int n, lim =1<<8;int a[1005], head[10];int dp[1005][(1<<8)+5];intcheck(int cnt ){memset( head,0,sizeof( head ));memset( dp,-1,sizeof( dp ));
dp[0][0]=0;for(int i =0;i < n;i ++){for(int j =0;j < lim;j ++)if( dp[i][j]!=-1){for(int k =1;k <=8;k ++){if((1<<( k -1))& j )continue;int x = head[k]+ cnt -1;if( x >= g[k].size())continue;
dp[g[k][x]][j ^(1<<( k -1))]=max( dp[g[k][x]][j ^(1<<( k -1))], dp[i][j]);++ x;if( x >= g[k].size())continue;
dp[g[k][x]][j ^(1<<( k -1))]=max( dp[g[k][x]][j ^(1<<( k -1))], dp[i][j]+1);}}
head[a[i]]++;}int ans =-1;for(int i =0;i < n;i ++)
ans =max( ans, dp[i][lim -1]);if( ans ==-1)return-1;elsereturn( cnt *8+ ans );}intmain(){scanf("%d",&n );for(int i =0;i < n;i ++)scanf("%d",&a[i]), g[a[i]].push_back( i );int l =1, r = n >>3, ans =-1;while( l <= r ){int mid =( l + r )>>1;if(check( mid )!=-1) ans = mid, l = mid +1;else r = mid -1;}if( ans ==-1){
ans =0;for(int i =1;i <=8;i ++)if( g[i].size())++ ans;printf("%d", ans );}elseprintf("%d",check( ans ));return0;}
#include<cstdio>#include<cstring>#define mod 998244353#define ll long long
ll L, R, ans;int K;
ll num[20], fac[21], bitcnt[1<<10];
ll g[20][1<<10][2][2], f[20][1<<10][2][2];voiddfs(int pos,int s,bool zero,bool up ){if(! pos ){
g[pos][s][zero][up]= bitcnt[s]<= K;
f[pos][s][zero][up]=0;return;}if(~ g[pos][s][zero][up])return;
g[pos][s][zero][up]= f[pos][s][zero][up]=0;int lim = up ? num[pos]:9;for(int i =0;i <= lim;i ++){int nextS =( zero &( i ==0))? s : s |(1<< i );dfs( pos -1, nextS, zero &( i ==0), up &( i == lim ));int F = f[pos -1][nextS][zero &( i ==0)][up &( i == lim )];int G = g[pos -1][nextS][zero &( i ==0)][up &( i == lim )];
g[pos][s][zero][up]=( g[pos][s][zero][up]+ G )% mod;
f[pos][s][zero][up]=( f[pos][s][zero][up]+1ll* i * fac[pos -1]% mod * G % mod + F )% mod;}}
ll solve( ll x ){memset( f,-1,sizeof( f ));memset( g,-1,sizeof( g ));memset( num,0,sizeof( num ));int cnt =0;while( x ) num[++ cnt]= x %10, x /=10;dfs( cnt,0,1,1);return f[cnt][0][1][1];}intmain(){scanf("%lld %lld %d",&L,&R,&K );
fac[0]=1;for(int i =1;i <=20;i ++)
fac[i]= fac[i -1]*10% mod;for(int i =1;i <=(1<<10);i ++)
bitcnt[i]= bitcnt[i >>1]+( i &1);printf("%lld",(solve( R )-solve( L -1)+ mod )% mod );return0;}
#include<cstdio>#define mod 1000000007int n, k, x1, x2, ans, t;int s[1<<24], dp[1<<24];intlowbit(int x ){return x &(-x );}voidadd(int x ){( ans += x )>= mod &&( ans -= mod );}intmain(){scanf("%d",&n ); n =1<< n;for(int i =1;i < n;i <<=1)scanf("%d",&s[i]);scanf("%d",&k ), k &&scanf("%d",&x1 ), k >1&&scanf("%d",&x2 );
dp[0]=1;for(int i =1;i < n;i ++, ans =0){if( k &&( s[i]= s[i ^( t =lowbit( i ))]+ s[t])== x1 )continue;if( k >1&& s[i]== x2 )continue;for(int j = i;j;j ^= t )add( dp[i ^( t =lowbit( j ))]);
dp[i]= ans;}printf("%d", dp[n -1]);return0;}