extern mod extra; extern mod std; type Substr = (uint, uint); fn sumsequence (s: &str, start: uint) -> ~[Substr] { let mut acc = ~[]; let mut sum = 0; for i in range(start, s.len()) { let val = from_str(s.slice(i,i+1)).unwrap(); if sum == val { acc.push((start, i+1)); } sum += val; if sum > 9 { break; } } acc } fn main () { //let s = "87456481848451713265785181841515124617521496471297469154148163548464541124"; let s = std::io::stdin().read_to_str(); let mut all_results = ~[]; for i in range(0, s.len()) { let clone = s.clone(); let result = do extra::future::Future::spawn { sumsequence(clone, i) }; all_results.push(result); } for results in all_results.mut_iter() { for r in results.get_ref().iter() { let &(start, end) = r; println(s.slice(start, end)); } } }