Problem:
Score : 400 points

Problem Statement

Given a string t, we will call it unbalanced if and only if the length of t is at least 2, and more than half of the letters in t are the same. For example, both voodoo and melee are unbalanced, while neither noon nor a is.

You are given a string s consisting of lowercase letters. Determine if there exists a (contiguous) substring of s that is unbalanced. If the answer is positive, show a position where such a substring occurs in s.

Constraints

2 ≦ |s| ≦ 10^5

s consists of lowercase letters.

Partial Score

200 points will be awarded for passing the test set satisfying 2 ≦ N ≦ 100.

Input

The input is given from Standard Input in the following format:

s

Output

If there exists no unbalanced substring of s, print -1 -1.

If there exists an unbalanced substring of s, let one such substring be s_a s_{a+1} ... s_{b} (1 ≦ a < b ≦ |s|), and print a b. If there exists more than one such substring, any of them will be accepted.

Sample Input 1

needed

Sample Output 1

2 5

The string s_2 s_3 s_4 s_5 = eede is unbalanced. There are also other unbalanced substrings. For example, the output 2 6 will also be accepted.

Sample Input 2

atcoder

Sample Output 2

-1 -1

The string atcoder contains no unbalanced substring.

Solution in C (GCC 5.4.1) (judge verdict: Runtime Error)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h> // int64_t

#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) > (b) ? (b) : (a))

int get_str(char *str, int size)
{
    char format[100];
    if (size == 0)
        return 0;
    snprintf(format, sizeof(format), "%%%ds", size);
    scanf(format, str);
    return 0;
}
#define NUM_MAX 100000

struct pair {
    int left;
    int right;
};
int main(void) {
    static char str[NUM_MAX+1];
    get_str(str, NUM_MAX);
    int len = strlen(str);
    str[len] = 0;

    int left;
    int right = 0;
    static int map[26];
    struct pair ans = {-1, -1};
    for(left = 0; left < len+1;) {
        char stop = 0;
        for(; right < len+1; right++) {
            if(map[stop] == 2) break;
            stop = str[right];
            map[stop]++;
        }

#ifdef DEBUG
        printf("%d %d\n", left, right);
#endif
        if(!stop) break;
        // remove
        while(1) {
            int ch = str[left];
            map[ch]--;
            left++;
            if(ch == stop) {
                if(right - left <= 2) {
                    ans = (struct pair){left-1+1, right-1+1};;
                    goto finish;
                }
                break;
            }
        }
    }
finish:
    printf("%d %d\n", ans.left, ans.right);
    return 0;
}