Language: C

/*

????????? ??????????????????????????? ???????????????

?????£?????¶?????????????????????????????????????????????????????¶???????????????????????????????????????
??¨??????????\???????????????????????????????????????????????????????????????????????????????????????????
??????????????±??¨??????????????????????\???????????????????????????????????????????????????¨????????????
???????????????????????????????????¨????????????????????????????¨???????????????????????????????????????????
??????????????????????????????????????????????????¬???????????°?????????????????§????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????¨?????¨?????§?????????????????????????????????????????¨??????????????????
??°???????????????abab?????§???????????????ab?????§????????°?????£?¶???§???????????????????????????ab???
??????abab???????????????????????????????????????abab, abab, abab ?????????????????? 

??????
????????¨??????????????????????????¨?????????????????????????????????????????????????????????????????????
??°????????????????????????

??\???
??\????????\????????¢?????§??????????????????

t
b

???????????????????????????????????????????????¨????????????t?????????????????????????????????????????????
???????????????????????¨????????????b???????????????????????????????????????????????±?°???????????????????
??????????????????1??\???1000??\?????????????????§????????? 

??????
?????????????????????????????????????????????????????????????????????????????????????????????????????????
????????§???????????????????????§?????£????????? 1,000,000,007 ??§?????£??????????????????????????? 

??????	http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2468455#1

*/

#include <stdio.h>
#include <string.h>		// ??????????????¢????????¢??°?????????

#define M 1000000007
#define	NUM	100

int main( void )
{
	int i, j, k;		// 
	char t[ NUM + 1 ];	// ????????????????????????????????¨???????????? t
	char b[ NUM + 1 ];	// ????????????????????????????????¨???????????? b
	int lent;			// t ???????????????
	int lenb;			// b ???????????????
	int sum;			// ??????????????????????????????????????????
	int d[ NUM ][ NUM ];

	scanf( "%s", t );	// ???????????????????????????
	lent = strlen( t );

	scanf( "%s", b );	// ???????????????????????????
	lenb = strlen( b );

	for ( i = 0 ; i < lenb ; i++ ) {
		for ( j = 0 ; j < lent ; j++ ) {
			d[ i ][ j ] = 0;
		}
	}
	
	for ( j = 0 ; j < lent ; j++ ) {
		// ??????????????????????????¢???
		if ( b[ 0 ] == t[ i ] ) {
			d[ 0 ][ j ] = 1;
		}
	}

	// ???????????????????????????????????????1??????????????§?????§??????????????????... 
	for ( i = 0 ; i < lenb - 1 ; i++ ) {
		for ( j = 0 ; j < lent ; j++ ) {
			if ( dp[ i ][ j ] != 0 ) {	// ???????????????????????????
				for ( k = j + 1 ; k < lent ; k++ ) {
					if ( b[ i + 1] == t[ k ] ) {
						dp[ i + 1 ][ k ] += dp[ i ][ j ];
						dp[ i + 1 ][ k ] %= M;
					}
				}
			}
		}
	}

	for ( i = 0 ; i < lenb ; i++ ) {
		for ( j = 0 ; j < lent ; j++ ) {
			printf( "%4d", d[ i ][ j ] );
		}
		printf( "\n" );
	}

	sum = 0;
	for ( i = 0 ; i < lent ; i++ ) {
		sum += dp[ lenb - 1 ][ i ];
		sum %= M;
	}

	printf( "%d\n", sum );

	return 0;
}

Compiler output:
main.c: In function 'main':
main.c:75:30: error: 'dp' undeclared (first use in this function); did you mean 'd'?
   75 |                         if ( dp[ i ][ j ] != 0 ) {      // ???????????????????????????
      |                              ^~
      |                              d
main.c:75:30: note: each undeclared identifier is reported only once for each function it appears in