← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func isVowel(c byte) bool {
	switch c {
	case 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U':
		return true
	}
	return false
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Buffer(make([]byte, 1024*1024), 1024*1024)
	if !scanner.Scan() {
		return
	}
	s := scanner.Text()
	n := len(s)

	if n == 0 {
		fmt.Println("No solution")
		return
	}

	P := make([]int, n+1)
	C := make([]int, 0, n+1)

	P[0] = 0
	C = append(C, 0)

	maxLen := 0
	count := 0

	for i := 1; i <= n; i++ {
		val := -2
		if isVowel(s[i-1]) {
			val = 1
		}
		P[i] = P[i-1] + val

		if P[i] > P[C[len(C)-1]] {
			C = append(C, i)
		}

		left, right := 0, len(C)-1
		ans := -1
		for left <= right {
			mid := left + (right-left)/2
			if P[C[mid]] >= P[i] {
				ans = mid
				right = mid - 1
			} else {
				left = mid + 1
			}
		}

		if ans != -1 {
			j := C[ans]
			l := i - j
			if l > 0 {
				if l > maxLen {
					maxLen = l
					count = 1
				} else if l == maxLen {
					count++
				}
			}
		}
	}

	if maxLen == 0 {
		fmt.Println("No solution")
	} else {
		fmt.Printf("%d %d\n", maxLen, count)
	}
}