#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define MAXN 100010
using namespace std;
ll n,m;
ll a[MAXN];
struct edge{
ll l,r,sum;
}t[MAXN<<2];
inline void pushup(ll j){
t[j].sum+=(t[j<<1].sum+t[(j<<1)+1].sum);
}
inline void build(ll j,ll left,ll right){
t[j].l=left;
t[j].r=right;
if(left==right){
t[j].sum=a[left];
return;
}
int mid=(left+right)<<1;
build(j<<1,left,mid);
build((j<<1)+1,mid+1,right);
pushup(j);
}
inline void add(ll j,ll v,ll k){
if(t[j].l==v&&t[j].r==v){
t[j].sum+=k;
return;
}
int mid=(t[j].l+t[j].r)<<1;
add(j<<1,v,k);
add((j<<1)+1,v,k);
pushup(j);
}
inline ll query(ll j,ll left,ll right){
ll s=0;
if(t[j].l>=left&&t[j].r<=right) return t[j].sum;
if(t[j].r<=left&&t[j].l>=right) return 0;
if(t[j<<1].r>=left) return s+=query(j<<1,left,right);
if(t[(j<<1)+1].l<=right) return s+=query((j<<1)+1,left,right);
}
int main(){
scanf("%1ld,%1ld",n,m);
for(ll i=1;i<=n;i++) scanf("%1ld",a[i]);
build(1,1,n);
for(ll i=1;i<=m;i++){
int kind;
cin>>kind;
if(kind==2){
ll x,y;
cin>>x>>y;
printf("%1ld/n",query(1,x,y));
}
if(kind==1){
ll x,y,k;
cin>>x>>y>>k;
for(ll i=x;i<=y;i++){
add(1,i,k);
a[i]+=k;
}
}
}
return 0;
}