
#include <bits/stdc++.h>
#define M 10000
using namespace std;
int n;
int t[M+5][10];
int from[M+5];
int res[M+5];
int dir[M+5][10];
int C[M+5][10];
int pro(int idx, int n, int turn) {
if(idx==n) return 0;
int& ret = t[idx][turn];
if(ret != -1) return ret;
int cur=(from[idx] + turn)%10;
int LT=(res[idx]-cur+10)%10;
int LC=pro(idx+1,n,(turn+LT)%10)+LT;
int RT=(cur-res[idx] + 10) % 10;
int RC=pro(idx+1,n,turn)+RT;
if (RC>LC){
ret=LC;
dir[idx][turn]=1;
C[idx][turn]=LT;
}else {
ret=RC;
dir[idx][turn]=-1;
C[idx][turn]=RT;
}
return ret;
}
void print(int idx, int n, int turn) {
if (idx == n) return;
int _move = dir[idx][turn] * C[idx][turn];
if (_move != 0){
printf("%d %d\n", idx + 1, _move);
}
if (dir[idx][turn] > 0){
print(idx + 1, n, (turn + _move + 10) % 10);
}else{
print(idx + 1, n, turn);
}
}
int main() {
//freopen("in.txt","r",stdin);
cin>>n;
for (int i=0;i<n;i++){
scanf("%1d", &from[i]);
}
for (int i=0;i<n;i++){
scanf("%1d", &res[i]);
}
memset(t, -1, sizeof(t));
printf("%d\n", pro(0,n,0));
print(0, n, 0);
return 0;
}
Comments
Post a Comment