package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
//主要思想,二叉搜索树应满足中序遍历(左中右)时,节点值单调递增
var pre,res=-1,true//pre为负数,所以第一轮无论根节点多小pre都会被更新;res为true是为了应对开局即出界的情况
func isTree(nums []int,i int) bool {
n := len(nums)
if i>=n{return res}//出界
isTree(nums,i<<1+1)//按照中序遍历,先查左子树
if nums[i]<=pre{res=false;return res}//按照中序遍历,查当前根,如果当前节点的值小于上一节点的值,则违反递增,return false
pre=nums[i]//如果当前根没有违反递增,则继续向后查
isTree(nums,i<<1+2)//按照中序遍历原则,最后查右子树
return res
}
func main() {
input := bufio.NewScanner(os.Stdin)
input.Scan()
str := strings.Split(input.Text(), ",")
arr := []int{}
for _, v := range str {
i, _ := strconv.Atoi(v)
arr = append(arr, i)
}
var ans string
if isTree(arr,0) {
ans= "True"
}else{
ans= "False"
}
fmt.Println(ans)
}