QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#354061#1287. Anti-hash TestDiuAC ✓16ms32244kbC++143.1kb2024-03-14 21:07:472024-03-14 21:07:47

Judging History

你现在查看的是最新测评结果

  • [2024-03-14 21:07:47]
  • 评测
  • 测评结果:AC
  • 用时:16ms
  • 内存:32244kb
  • [2024-03-14 21:07:47]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+10,mod=1e9+7,inv2=mod+1>>1,inv3=(mod+1)/3;
int T;
ll n;
int a[N],b[N];
char s[N];
int qpow(int x,ll y=mod-2){
	int m=1;y%=(mod-1);
	for(;y;y>>=1,x=1ll*x*x%mod)if(y&1)m=1ll*m*x%mod;
	return m;
}
#define NO {puts("-1");return;}
namespace Baoli{
	int len[N],fa[N],nxt[N][2];
	int tot,lst,f[N];
	vector<int> G[N];
	void init(){
		for(int i=0;i<=tot;i++)len[i]=fa[i]=nxt[i][0]=nxt[i][1]=f[i]=0,G[i].clear();
		len[0]=tot=lst=0,fa[0]=-1;
	}
	void ins(int c){
		int cur=++tot;f[cur]=1;
		len[cur]=len[lst]+1;
		int p=lst;
		while(p!=-1&&!nxt[p][c])nxt[p][c]=cur,p=fa[p];
		if(p==-1)fa[cur]=0;
		else{
			int q=nxt[p][c];
			if(len[p]+1==len[q])fa[cur]=q;
			else{
				int cl=++tot;
				len[cl]=len[p]+1;
				for(int i=0;i<2;i++)nxt[cl][i]=nxt[q][i];
				fa[cl]=fa[q];
				while(p!=-1&&nxt[p][c]==q)nxt[p][c]=cl,p=fa[p];
				fa[q]=fa[cur]=cl;
			}
		}
		lst=cur;
	}
	void dfs(int u){
		for(int v:G[u])dfs(v),f[u]+=f[v];
	}
	void solve(int n,int m){
		init();
		for(int i=0;i<(1<<n);i++)ins(__builtin_popcount(i)&1);
		for(int i=1;i<=tot;i++)G[fa[i]].push_back(i);
		dfs(0);
		int p=0;
		for(int i=1;i<=m;i++){
			p=nxt[p][s[i]-'a'];
			if(!p)NO;
		}
		int ans1=f[p],ans2=0;
		for(int i=1;i<=tot;i++)if(f[i]==ans1)ans2+=len[i]-len[fa[i]];
		printf("%d %d\n",ans1,ans2);
	}
}
int pw2[30],f1[30],f2[30],g1[30],g2[30];
void init(int n){
	pw2[0]=1;
	for(int i=1;i<=n;i++)pw2[i]=(pw2[i-1]+pw2[i-1])%mod;
	f1[0]=f1[1]=1,f1[2]=2,f2[2]=1;
	for(int i=3;i<=n;i++){
		f1[i]=(f1[i-1]+2ll*f2[i-1])%mod;
		f2[i]=f1[i-1];
	}
	g1[0]=g1[1]=g2[0]=g2[1]=1;
	g1[2]=4,g2[2]=6;
	for(int i=3;i<=n;i++){
		g1[i]=(1ll*f1[i-1]*pw2[i-1]+5ll*f2[i-1]*pw2[i-3])%mod;
		g2[i]=(g1[i]+1ll*f2[i]*pw2[i-1])%mod;
	}
}
int calc(int c){
	return (1ll*f1[c-2]*(pw2[c-2]+pw2[c-1]+pw2[c-3]+pw2[c-2]+pw2[c-1]+pw2[c-2])+1ll*f2[c-2]*(pw2[c-3]+pw2[c-4]+pw2[c-3]+pw2[c-1]+pw2[c-3]+pw2[c-4]+pw2[c-3]+pw2[c-1]))%mod;
}
void work(ll k,int n,bool x,int c){
	if(n>=5)NO;
	if(n==4)c+=3,x^=1;
	if(n==3)c+=2,x=1;
	if(n==2)c+=1;
	if(k<c)NO;
	if(n==1){
		printf("%d %d\n",qpow(2,k-1),2);
		return;
	}
	if(c+1>=k){
		printf("%d %d\n",1,calc(k));
		return;
	}
	if(k-c&1){
		int ans1=1ll*(qpow(2,k-c+1)-1)*inv3%mod;
		int ans2=(g1[c]+g2[c])%mod;
		printf("%d %d\n",ans1,ans2);
	}else{
		int ans1=1ll*(qpow(2,k-c+2)-1)*inv3%mod;
		int ans2;
		if(x)ans1=1ll*(ans1-1)*inv2%mod,ans2=g2[c];
		else ans1=1ll*(ans1+1)*inv2%mod,ans2=g1[c];
		printf("%d %d\n",ans1,ans2);
	}
}
void solve(ll k,int n){
	int c=0;
	while(1){
		int i=2;
		while(i<=n&&a[i]!=a[i-1])++i;
		if(i>n)return work(k,n,a[1],c);
		if(i&1){
			for(int j=1;j<=n;j+=2){
				if(j<n&&a[j]==a[j+1]){puts("-1");return;}
				a[j+1>>1]=a[j];
			}
			n=n+1>>1;
		}else{
			a[0]=a[1]^1;
			for(int j=0;j<=n;j+=2){
				if(j<n&&a[j]==a[j+1]){puts("-1");return;}
				a[j+2>>1]=a[j];
			}
			n=n+2>>1;
		}
		++c;
	}
}
signed main(){
	scanf("%d",&T);
	init(25);
	for(;T--;){
		scanf("%lld\n%s",&n,s+1);
		int len=strlen(s+1);
		for(int i=1;i<=len;i++)a[i]=s[i]=='b';
		if(n<=5)Baoli::solve(n,len);
		else solve(n,len);
	}
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 27284kb

input:

4
10
a
10
abba
5
abbabaabbaababbabaababbaabbabaab
20
ababab

output:

512 2
171 4
1 344
-1

result:

ok 7 tokens

Test #2:

score: 0
Accepted
time: 0ms
memory: 27360kb

input:

3
1
a
1
ab
1
b

output:

1 3
1 3
1 3

result:

ok 6 tokens

Test #3:

score: 0
Accepted
time: 0ms
memory: 27332kb

input:

10
2
a
2
ab
2
abb
2
abba
2
b
2
bb
2
bba
2
b
2
ba
2
a

output:

2 2
1 6
1 6
1 6
2 2
1 6
1 6
2 2
1 6
2 2

result:

ok 20 tokens

Test #4:

score: 0
Accepted
time: 11ms
memory: 27356kb

input:

36
3
a
3
ab
3
abb
3
abba
3
abbab
3
abbaba
3
abbabaa
3
abbabaab
3
b
3
bb
3
bba
3
bbab
3
bbaba
3
bbabaa
3
bbabaab
3
b
3
ba
3
bab
3
baba
3
babaa
3
babaab
3
a
3
ab
3
aba
3
abaa
3
abaab
3
b
3
ba
3
baa
3
baab
3
a
3
aa
3
aab
3
a
3
ab
3
b

output:

4 2
3 1
1 23
1 23
1 23
1 23
1 23
1 23
4 2
1 23
1 23
1 23
1 23
1 23
1 23
4 2
2 1
1 23
1 23
1 23
1 23
4 2
3 1
1 23
1 23
1 23
4 2
2 1
1 23
1 23
4 2
1 23
1 23
4 2
3 1
4 2

result:

ok 72 tokens

Test #5:

score: 0
Accepted
time: 3ms
memory: 27360kb

input:

136
4
a
4
ab
4
abb
4
abba
4
abbab
4
abbaba
4
abbabaa
4
abbabaab
4
abbabaabb
4
abbabaabba
4
abbabaabbaa
4
abbabaabbaab
4
abbabaabbaaba
4
abbabaabbaabab
4
abbabaabbaababb
4
abbabaabbaababba
4
b
4
bb
4
bba
4
bbab
4
bbaba
4
bbabaa
4
bbabaab
4
bbabaabb
4
bbabaabba
4
bbabaabbaa
4
bbabaabbaab
4
bbabaabbaab...

output:

8 2
5 2
3 4
3 4
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
8 2
3 4
3 4
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
8 2
5 2
2 6
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
8 2
5 2
2 6
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
1 86
8 2
5 2
2 6
2 6
1 86
1 ...

result:

ok 272 tokens

Test #6:

score: 0
Accepted
time: 0ms
memory: 27252kb

input:

528
5
a
5
ab
5
abb
5
abba
5
abbab
5
abbaba
5
abbabaa
5
abbabaab
5
abbabaabb
5
abbabaabba
5
abbabaabbaa
5
abbabaabbaab
5
abbabaabbaaba
5
abbabaabbaabab
5
abbabaabbaababb
5
abbabaabbaababba
5
abbabaabbaababbab
5
abbabaabbaababbaba
5
abbabaabbaababbabaa
5
abbabaabbaababbabaab
5
abbabaabbaababbabaaba
5
...

output:

16 2
11 1
5 10
5 10
3 13
3 13
3 13
3 13
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
16 2
5 10
5 10
3 13
3 13
3 13
3 13
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 344
1 3...

result:

ok 1056 tokens

Test #7:

score: 0
Accepted
time: 8ms
memory: 27256kb

input:

2080
6
a
6
ab
6
abb
6
abba
6
abbab
6
abbaba
6
abbabaa
6
abbabaab
6
abbabaabb
6
abbabaabba
6
abbabaabbaa
6
abbabaabbaab
6
abbabaabbaaba
6
abbabaabbaabab
6
abbabaabbaababb
6
abbabaabbaababba
6
abbabaabbaababbab
6
abbabaabbaababbaba
6
abbabaabbaababbabaa
6
abbabaabbaababbabaab
6
abbabaabbaababbabaaba
6...

output:

32 2
21 2
11 4
11 4
5 34
5 34
5 34
5 34
3 52
3 52
3 52
3 52
3 52
3 52
3 52
3 52
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1376
1 1...

result:

ok 4160 tokens

Test #8:

score: 0
Accepted
time: 5ms
memory: 27272kb

input:

8256
7
a
7
ab
7
abb
7
abba
7
abbab
7
abbaba
7
abbabaa
7
abbabaab
7
abbabaabb
7
abbabaabba
7
abbabaabbaa
7
abbabaabbaab
7
abbabaabbaaba
7
abbabaabbaabab
7
abbabaabbaababb
7
abbabaabbaababba
7
abbabaabbaababbab
7
abbabaabbaababbaba
7
abbabaabbaababbabaa
7
abbabaabbaababbabaab
7
abbabaabbaababbabaaba
7...

output:

64 2
43 1
21 10
21 10
11 13
11 13
11 13
11 13
5 136
5 136
5 136
5 136
5 136
5 136
5 136
5 136
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
3 208
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 5504
1 550...

result:

ok 16512 tokens

Test #9:

score: 0
Accepted
time: 5ms
memory: 27384kb

input:

1946
10
abbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaab
10
aabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababb...

output:

2 21504
1 352256
1 352256
1 352256
1 352256
1 352256
1 352256
1 352256
3 13312
1 352256
3 13312
1 352256
1 352256
1 352256
1 352256
1 352256
1 352256
5 8704
1 352256
1 352256
1 352256
1 352256
1 352256
1 352256
3 13312
1 352256
1 352256
1 352256
1 352256
1 352256
1 352256
1 352256
1 352256
1 352256
...

result:

ok 3892 tokens

Test #10:

score: 0
Accepted
time: 3ms
memory: 27428kb

input:

100
20
ababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababb...

output:

42 88080384
21 570425344
43 54525952
42 88080384
21 570425344
43 54525952
21 570425344
21 570425344
42 88080384
21 570425344
42 88080384
42 88080384
42 88080384
42 88080384
43 54525952
21 570425344
43 54525952
43 54525952
43 54525952
42 88080384
43 54525952
42 88080384
21 570425344
43 54525952
43 54...

result:

ok 200 tokens

Test #11:

score: 0
Accepted
time: 11ms
memory: 27784kb

input:

12
20
babbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbab...

output:

2 548578150
3 958643621
5 126805441
5 126805441
2 548578150
3 958643621
5 126805441
2 548578150
5 126805441
2 548578150
2 548578150
42 88080384

result:

ok 24 tokens

Test #12:

score: 0
Accepted
time: 8ms
memory: 32144kb

input:

1
20
abbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbab...

output:

1 367184873

result:

ok 2 tokens

Test #13:

score: 0
Accepted
time: 10ms
memory: 27300kb

input:

1823
30
babbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababb...

output:

699050 344064
349525 2228224
699050 344064
699050 344064
349525 2228224
2796203 13312
699050 344064
349525 2228224
699050 344064
349525 2228224
699050 344064
1398101 139264
699051 212992
699051 212992
699051 212992
1398101 139264
1398101 139264
699050 344064
699050 344064
699050 344064
699050 344064...

result:

ok 3646 tokens

Test #14:

score: 0
Accepted
time: 16ms
memory: 27352kb

input:

1850
50
baabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaab...

output:

7746719 344064
503873363 2228224
503873363 2228224
503873363 2228224
503873363 2228224
7746719 344064
7746719 344064
503873363 2228224
7746719 344064
15493439 139264
503873363 2228224
7746719 344064
7746719 344064
15493439 139264
15493439 139264
15493439 139264
15493439 139264
15493439 139264
774671...

result:

ok 3700 tokens

Test #15:

score: 0
Accepted
time: 11ms
memory: 27304kb

input:

1844
60
baabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaab...

output:

932640889 344064
932640890 212992
932640889 344064
865281772 139264
865281772 139264
865281772 139264
932640889 344064
865281772 139264
932640890 212992
932640890 212992
932640890 212992
865281772 139264
932640890 212992
966320448 2228224
932640889 344064
966320448 2228224
966320448 2228224
93264088...

result:

ok 3688 tokens

Test #16:

score: 0
Accepted
time: 8ms
memory: 27688kb

input:

10
38
aababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababb...

output:

699051 958643621
453246046 958643621
11184811 958643621
812984176 958643621
5461 126805441
251936682 958643621
726623026 507221764
10923 958643621
5592405 507221764
5461 126805441

result:

ok 20 tokens

Test #17:

score: 0
Accepted
time: 3ms
memory: 27248kb

input:

193
173
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabba...

output:

237153758 851968
307702922 35651584
948615031 3407872
915865723 13631488
414031736 142606336
789733870 3407872
54276824 2228224
690892306 142606336
707015872 851968
457932861 142606336
543895136 54525952
948615031 851968
983682410 8912896
304996172 13631488
846493452 54525952
249015472 13631488
9369...

result:

ok 386 tokens

Test #18:

score: 0
Accepted
time: 7ms
memory: 27752kb

input:

18
681424606
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababb...

output:

571651312 126805441
783425335 126805441
233941502 489660907
211737098 489660907
996634110 126805441
699393285 570425344
529355244 489660907
566526228 281701362
35498412 872415232
225630107 142606336
573899998 218103808
746380945 126805441
546433028 489660907
944749929 872415232
539391422 489660907
7...

result:

ok 36 tokens

Test #19:

score: 0
Accepted
time: 3ms
memory: 30968kb

input:

4
83314964333
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaabab...

output:

717201110 115548168
744976969 507221764
695784310 489660907
979190234 13312

result:

ok 8 tokens

Test #20:

score: 0
Accepted
time: 11ms
memory: 30420kb

input:

4
73613248749
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaabab...

output:

300930365 507221764
992194206 338297831
461965452 126805441
346420605 218103808

result:

ok 8 tokens

Test #21:

score: 0
Accepted
time: 4ms
memory: 30876kb

input:

4
55321598572
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaabab...

output:

173541129 338297831
273488834 507221764
243115041 489660907
350785676 8912896

result:

ok 8 tokens

Test #22:

score: 0
Accepted
time: 0ms
memory: 32080kb

input:

1
999999999999999999
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaa...

output:

21845 115548168

result:

ok 2 tokens

Test #23:

score: 0
Accepted
time: 11ms
memory: 32236kb

input:

1
999999999999999999
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaa...

output:

21845 115548168

result:

ok 2 tokens

Test #24:

score: 0
Accepted
time: 11ms
memory: 32132kb

input:

1
949450819637416509
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaa...

output:

33991129 115548168

result:

ok 2 tokens

Test #25:

score: 0
Accepted
time: 10ms
memory: 32244kb

input:

1
285679775210965354
abbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaa...

output:

302669459 338297831

result:

ok 2 tokens