Problem:
Problem H: Eleven Lover

Edward Leven loves multiples of eleven very much. When he sees a number, he always tries
to find consecutive subsequences (or substrings) forming multiples of eleven. He calls such
subsequences as 11-sequences. For example, he can find an 11-sequence 781 in a number 17819.

He thinks a number which has many 11-sequences is a good number. He would like to find out
a very good number. As the first step, he wants an easy way to count how many 11-sequences
are there in a given number. Even for him, counting them from a big number is not easy.
Fortunately, one of his friends, you, is a brilliant programmer. He asks you to write a program
to count the number of 11-sequences. Note that an 11-sequence must be a positive number
without leading zeros.

Input

The input is a sequence of lines each of which contains a number consisting of less than or equal
to 80000 digits.

The end of the input is indicated by a line containing a single zero, which should not be processed.

Output

For each input number, output a line containing the number of 11-sequences.

You can assume the answer fits in a 32-bit signed integer.

Sample Input

17819
1111
11011
1234567891011121314151617181920
0

Output for the Sample Input

1
4
4
38

Solution in JAVA (judge verdict: Accepted)

import java.util.*;
import java.awt.geom.*;

public class Main{
	
	private void doit(){
		Scanner sc = new Scanner(System.in);
		while(true){
			char [] c= sc.next().toCharArray();
			if(c.length <= 1 && c[0] == '0'){
				break;
			}
			int [][] dp = new int[2][11];
			if(c[0] != '0'){
				dp[0][c[0] - '0'] = 1;
			}
			int count = 0;
			for(int i = 1; i < c.length; i++){
				
				int prev = (i + 1) % 2;
				int num = c[i] - '0';
				Arrays.fill(dp[i % 2], 0);
				if(i % 2 == 1) num *= -1;
				for(int j = 0; j < 11; j++){
					if(dp[prev][j] == 0) continue;
					int nextJ = (num + j + 11) % 11;
					dp[i % 2][nextJ] += dp[prev][j];
					if(nextJ == 0) count += dp[i % 2][nextJ];
				}
				if(num == 0) continue;
				dp[i % 2][(num + 11) % 11] += 1;
			}
			System.out.println(count);
		}
	}

	private void debug(Object... o) {
		System.out.println("debug = " + Arrays.deepToString(o));
	}

	public static void main(String[] args) {
		new Main().doit();
	}
}