type arr=array[1..50] of longint;
var s:string;
n,ans:longint;
rule:array[1..50,1..2] of string;
////////////////////////////////////////////////////////////////////////////////
procedure init;
var ss:string;
i:longint;
begin
assign(input,'zuxian.in'); assign(output,'zuxian.out');
reset(input); rewrite(output);
readln(s); ans:=length(s);
readln(n);
for i:=1 to n do
begin
readln(ss); rule[i,1]:=copy(ss,1,pos('-',ss)-1);
delete(ss,1,pos('>',ss)); rule[i,2]:=ss;
end;
end;
////////////////////////////////////////////////////////////////////////////////
procedure dfs(s:string);
var i,j,num,num2:longint;
ss:string;
recordnum:arr;
begin
for i:=1 to n do
begin
ss:=s;
num2:=0;
num:=pos(rule[i,2],ss);
while num<>0 do
begin
inc(num2);
recordnum[num2]:=num+num2-1;
delete(ss,num,1);
num:=pos(rule[i,2],ss);
end;
for j:=1 to num2 do
begin
ss:=s;
delete(ss,recordnum[j],length(rule[i,2]));
insert(rule[i,1],ss,recordnum[j]);
if length(ss)<ans then ans:=length(ss);
dfs(ss);
end;
end;
end;
////////////////////////////////////////////////////////////////////////////////
procedure print;
begin
write(ans);
end;
////////////////////////////////////////////////////////////////////////////////
begin
init;
dfs(s);
print;
end.