#
# @LANG: ruby
#

%%{
    machine atoi3;
    action begin {
        neg = false;
        val = 0;
    }
    action see_neg {
        neg = true;
    }
    action add_digit {
		val = val * 10 + (fc - "0"[0].ord);
    }
    action finish {
		val = -1 * val if neg
    }
    action print {
        print val, "\n"
    }
    atoi = (('-' @ see_neg | '+') ? (digit @ add_digit) +) > begin % finish;
    main := atoi '\n' @ print;
}%%

%% write data;

def run_machine( data )
	p = 0;
	pe = data.length
	cs = 0
	val = 0;
	neg = false;

	%% write init;
	%% write exec;
	if  cs >= atoi3_first_final
		puts "ACCEPT"
	else
		puts "FAIL"
	end
end

inp = [
		"1\n",
		"12\n",
		"222222\n",
		"+2123\n",
		"213 3213\n",
		"-12321\n",
		"--123\n",
		"-99\n",
		" -3000\n",
]

inp.each { |str| run_machine(str) }

##### OUTPUT #####
1
ACCEPT
12
ACCEPT
222222
ACCEPT
2123
ACCEPT
FAIL
-12321
ACCEPT
FAIL
-99
ACCEPT
FAIL
